home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / docs / inter45a / interrup.d < prev    next >
Encoding:
Text File  |  1995-03-26  |  340.2 KB  |  9,242 lines

  1. Interrupt List, part 4 of 12
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------X-1AB000-----------------------------
  4. INT 1A U - HP 100LX/200LX - PCMCIA - ???
  5.     AX = B000h
  6.     ES:BX -> parameter block ???
  7. Return: CF clear if ???
  8.     CF set if ???
  9. Note:    called by HP 100LX/200LX PCMCIA client CIC100.EXE
  10. --------d-1AB001CX4D52-----------------------
  11. INT 1A - Microsoft Real-Time Compression Interface (MRCI) - ROM-BASED SERVER
  12.     AX = B001h
  13.     CX = 4D52h ("MR")
  14.     DX = 4349h ("CI")
  15. Return: CX = 4943h ("IC") if installed
  16.     DX = 524Dh ("RM") if installed
  17.         ES:DI -> MRCINFO structure (see #0544)
  18. Note:    this call is functionally identical to INT 2F/AX=4A12h, which should
  19.       be called first, as this call is used for the first, ROM-based
  20.       MRCI server, while the other call is used for RAM-based servers
  21.       which may be partially or entirely replacing a prior server
  22. SeeAlso: INT 2F/AX=4A12h
  23.  
  24. Format of MRCINFO structure:
  25. Offset    Size    Description    (Table 0544)
  26.  00h  4 BYTEs    vendor signature
  27.         "MSFT" Microsoft
  28.  04h    WORD    server version (high=major)
  29.  06h    WORD    MRCI specification version
  30.  08h    DWORD    address of server entry point (see #0546)
  31.  0Ch    WORD    bit flags: server capabilities (see #0545)
  32.  0Eh    WORD    bit flags: hardware assisted capabilities (see #0545)
  33.  10h    WORD    maximum block size supported by server (at least 8192 bytes)
  34.  
  35. Bitfields for MRCI capabilities:
  36. Bit(s)    Description    (Table 0545)
  37.  0    standard compress
  38.  1    standard decompress
  39.  2    update compress
  40.  3    MaxCompress (not present in initial public release)
  41.  4    reserved
  42.  5    incremental decompress
  43.  6    MRCI 2.0 standard compress
  44.  7    MRCI 2.0 standard decompress
  45.  8-14    reserved
  46.  15    this structure is in ROM and can't be modified
  47.     (server capabilities only)
  48.  
  49. (Table 0546)
  50. Call MRCI entry point with:
  51.     DS:SI -> MRCREQUEST structure (see #0547)
  52.     CX = type of client (0000h application, 0001h file system)
  53.     AX = operation
  54.         0001h perform standard compression
  55.         0002h perform standard decompression
  56.         0004h perform update compression
  57.         0008h perform MaxCompress
  58.         0020h perform incremental decompression
  59.         0040h perform MRCI 2.0 standard compression
  60.         0080h perform MRCI 2.0 standard decompression
  61.     AX = FFFFh clear flags
  62.         BX = bitmask of flags to clear (set bits in BX are flags to clear)
  63. Return: AX = status
  64.         0000h successful
  65.         0001h invalid function
  66.         0002h server busy, try again
  67.         0003h destination buffer too small
  68.         0004h incompressible data
  69.         0005h bad compressed data format
  70.     BP destroyed (MS-DOS 6.2)
  71. Note:    MRCI driver may chain to a previous driver
  72.  
  73. Format of MRCREQUEST structure:
  74. Offset    Size    Description    (Table 0547)
  75.  00h    DWORD    pointer to source buffer
  76.  04h    WORD    size of source buffer (0000h = 64K)
  77.  06h    WORD    (UpdateCompress only)
  78.         (call) offset in source buffer of beginning of changed data
  79.         (ret) offset in destination buffer of beginning of changed
  80.               compressed data
  81.  08h    DWORD    pointer to destination buffer
  82.         must contain original compressed data for UpdateCompress
  83.  0Ch    WORD    size of destination buffer (0000h = 64K)
  84.         any compression: size of buffer for compressed data
  85.         standard decompression: number of bytes to be decompressed
  86.         incremental decompression: number of byte to decompress now
  87.         (ret) actual size of resulting data
  88.  0Eh    WORD    client compressed data storage allocation size
  89.  10h    DWORD    incremental decompression state data
  90.         set to 00000000h before first incremental decompression call
  91. Notes:    the source and destination buffers may not overlap
  92.     the source and destination buffer sizes should normally be the same
  93.     application should not update the contents of the MRCREQUEST structure
  94.       between incremental decompression calls
  95. --------X-1AB101-----------------------------
  96. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK
  97.     AX = B101h
  98. Return: AH = 00h if installed
  99.         CF clear
  100.         EDX = 20494350h (' ICP')
  101.         EDI = physical address of protected-mode entry point (see #0550)
  102.         AL = PCI hardware characteristics (see #0549)
  103.         BH = PCI interface level major version (BCD)
  104.         BL = PCI interface level minor version (BCD)
  105.         CL = number of last PCI bus in system
  106.     EAX, EBX, ECX, and EDX may be modified
  107.     all other flags (except IF) may be modified
  108. Note:    this function may require up to 1024 byte of stack; it will not enable
  109.       interrupts if they were disabled before making the call
  110. SeeAlso: AX=B181h
  111.  
  112. (Table 0548)
  113. Values for PCI BIOS v2.0c status codes:
  114.  00h    successful
  115.  81h    unsupported function
  116.  83h    bad vendor ID
  117.  86h    device not found
  118.  87h    bad PCI register number
  119.  
  120. Bitfields for PCI hardware characteristics:
  121. Bit(s)    Description    (Table 0549)
  122.  0    configuration space access mechanism 1 supported
  123.  1    configuration space access mechanism 2 supported
  124.  2-3    reserved
  125.  4    Special Cycle generation mechanism 1 supported
  126.  5    Special Cycle generation mechanism 2 supported
  127.  6-7    reserved
  128.  
  129. (Table 0550)
  130. Call protected-mode entry point with:
  131.     registers as for real/V86-mode INT call
  132.     CS = ring 0 descriptor with access to full address space
  133. Return: as for real/V86-mode call
  134. --------X-1AB102-----------------------------
  135. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE
  136.     AX = B102h
  137.     CX = device ID
  138.     DX = vendor ID
  139.     SI = device index (0-n)
  140. Return: CF clear if successful
  141.     CF set on error
  142.     AH = status (00h,83h,86h) (see #0548)
  143.         00h successful
  144.         BH = bus number
  145.         BL = device/function number (bits 7-3 device, bits 2-0 func)
  146.     EAX, EBX, ECX, and EDX may be modified
  147.     all other flags (except IF) may be modified
  148. Notes:    this function may require up to 1024 byte of stack; it will not enable
  149.       interrupts if they were disabled before making the call
  150.     device ID FFFFh may be reserved as a wildcard in future implementations
  151.     the meanings of BL and BH on return were exchanged between the initial
  152.       drafts of the specification and final implementation
  153.     all devices sharing a single vendor ID and device ID may be enumerated
  154.       by incrementing SI from 0 until error 86h is returned
  155. SeeAlso: AX=B182h
  156. --------X-1AB103-----------------------------
  157. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE
  158.     AX = B103h
  159.     ECX = class code (bits 23-0)
  160.         xx400000h = multimedia device, video subclass
  161.         xx408000h = multimedia device, other multimedia device
  162.     SI = device index (0-n)
  163. Return: CF clear if successful
  164.     CF set on error
  165.     AH = status (00h,86h) (see #0548)
  166.         00h successful
  167.         BH = bus number
  168.         BL = device/function number (bits 7-3 device, bits 2-0 func)
  169.         86h device not found
  170.     EAX, EBX, ECX, and EDX may be modified
  171.     all other flags (except IF) may be modified
  172. Notes:    this function may require up to 1024 byte of stack; it will not enable
  173.       interrupts if they were disabled before making the call
  174.     the meanings of BL and BH on return were exchanged between the initial
  175.       drafts of the specification and final implementation
  176.     all devices sharing the same Class Code may be enumerated by
  177.       incrementing SI from 0 until error 86h is returned
  178. SeeAlso: AX=B183h
  179. --------X-1AB106-----------------------------
  180. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS
  181.     AX = B106h
  182.     BL = bus number
  183.     EDX = Special Cycle data
  184. Return: CF clear if successful
  185.     CF set on error
  186.     AH = status (00h,81h) (see #0548)
  187.     EAX, EBX, ECX, and EDX may be modified
  188.     all other flags (except IF) may be modified
  189. Note:    this function may require up to 1024 byte of stack; it will not enable
  190.       interrupts if they were disabled before making the call
  191. SeeAlso: AX=B186h
  192. --------X-1AB108-----------------------------
  193. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE
  194.     AX = B108h
  195.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  196.     BH = bus number
  197.     DI = register number (0000h-00FFh)
  198. Return: CF clear if successful
  199.         CL = byte read
  200.     CF set on error
  201.     AH = status (00h,87h) (see #0548)
  202.     EAX, EBX, ECX, and EDX may be modified
  203.     all other flags (except IF) may be modified
  204. Notes:    this function may require up to 1024 byte of stack; it will not enable
  205.       interrupts if they were disabled before making the call
  206.     the meanings of BL and BH on entry were exchanged between the initial
  207.       drafts of the specification and final implementation
  208. SeeAlso: AX=B188h
  209. --------X-1AB109-----------------------------
  210. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD
  211.     AX = B109h
  212.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  213.     BH = bus number
  214.     DI = register number (0000h-00FFh)
  215. Return: CF clear if successful
  216.         CX = word read
  217.     CF set on error
  218.     AH = status (00h,87h) (see #0548)
  219.     EAX, EBX, ECX, and EDX may be modified
  220.     all other flags (except IF) may be modified
  221. Notes:    this function may require up to 1024 byte of stack; it will not enable
  222.       interrupts if they were disabled before making the call
  223.     the meanings of BL and BH on entry were exchanged between the initial
  224.       drafts of the specification and final implementation
  225. SeeAlso: AX=B189h
  226. --------X-1AB10A-----------------------------
  227. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD
  228.     AX = B10Ah
  229.     BH = bus number
  230.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  231.     DI = register number (0000h-00FFh)
  232. Return: CF clear if successful
  233.         ECX = dword read
  234.     CF set on error
  235.     AH = status (00h,87h) (see #0548)
  236.     EAX, EBX, ECX, and EDX may be modified
  237.     all other flags (except IF) may be modified
  238. Notes:    this function may require up to 1024 byte of stack; it will not enable
  239.       interrupts if they were disabled before making the call
  240.     the meanings of BL and BH on entry were exchanged between the initial
  241.       drafts of the specification and final implementation
  242. SeeAlso: AX=B18Ah
  243. --------X-1AB10B-----------------------------
  244. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE
  245.     AX = B10Bh
  246.     BH = bus number
  247.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  248.     DI = register number (0000h-00FFh)
  249.     CL = byte to write
  250. Return: CF clear if successful
  251.     CF set on error
  252.     AH = status (00h,87h) (see #0548)
  253.     EAX, EBX, ECX, and EDX may be modified
  254.     all other flags (except IF) may be modified
  255. Notes:    this function may require up to 1024 byte of stack; it will not enable
  256.       interrupts if they were disabled before making the call
  257.     the meanings of BL and BH on entry were exchanged between the initial
  258.       drafts of the specification and final implementation
  259. SeeAlso: AX=B18Bh
  260. --------X-1AB10C-----------------------------
  261. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD
  262.     AX = B10Ch
  263.     BH = bus number
  264.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  265.     DI = register number (multiple of 2 less than 0100h)
  266.     CX = word to write
  267. Return: CF clear if successful
  268.     CF set on error
  269.     AH = status (00h,87h) (see #0548)
  270.     EAX, EBX, ECX, and EDX may be modified
  271.     all other flags (except IF) may be modified
  272. Notes:    this function may require up to 1024 byte of stack; it will not enable
  273.       interrupts if they were disabled before making the call
  274.     the meanings of BL and BH on entry were exchanged between the initial
  275.       drafts of the specification and final implementation
  276. SeeAlso: AX=B18Ch
  277. --------X-1AB10D-----------------------------
  278. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD
  279.     AX = B10Dh
  280.     BH = bus number
  281.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  282.     DI = register number (multiple of 4 less than 0100h)
  283.     ECX = dword to write
  284. Return: CF clear if successful
  285.     CF set on error
  286.     AH = status (00h,87h) (see #0548)
  287.     EAX, EBX, ECX, and EDX may be modified
  288.     all other flags (except IF) may be modified
  289. Notes:    this function may require up to 1024 byte of stack; it will not enable
  290.       interrupts if they were disabled before making the call
  291.     the meanings of BL and BH on entry were exchanged between the initial
  292.       drafts of the specification and final implementation
  293. SeeAlso: AX=B18Dh
  294. --------X-1AB181-----------------------------
  295. INT 1A - Intel PCI BIOS v2.0c - INSTALLATION CHECK (32-bit)
  296.     AX = B181h
  297. Return: as for AX=B101h
  298. SeeAlso: AX=B101h
  299. --------X-1AB182-----------------------------
  300. INT 1A - Intel PCI BIOS v2.0c - FIND PCI DEVICE (32-bit)
  301.     AX = B182h
  302.     CX = device ID
  303.     DX = vendor ID
  304.     SI = device index (0-n)
  305. Return: as for AX=B102h
  306. SeeAlso: AX=B102h
  307. --------X-1AB183-----------------------------
  308. INT 1A - Intel PCI BIOS v2.0c - FIND PCI CLASS CODE (32-bit)
  309.     AX = B183h
  310.     ECX = class code (bits 23-0)
  311.     SI = device index (0-n)
  312. Return: as for AX=B103h
  313. SeeAlso: AX=B103h
  314. --------X-1AB186-----------------------------
  315. INT 1A - Intel PCI BIOS v2.0c - PCI BUS-SPECIFIC OPERATIONS (32-bit)
  316.     AX = B186h
  317.     BH = bus number
  318.     EDX = Special Cycle data
  319. Return: as for AX=B106h
  320. Note:    the meanings of BL and BH on return were exchanged between the initial
  321.       drafts of the specification and final implementation
  322. SeeAlso: AX=B106h
  323. --------X-1AB188-----------------------------
  324. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION BYTE (32-bit)
  325.     AX = B188h
  326.     BH = bus number
  327.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  328.     DI = register number (0000h-00FFh)
  329. Return: as for AX=B108h
  330. Note:    the meanings of BL and BH on return were exchanged between the initial
  331.       drafts of the specification and final implementation
  332. SeeAlso: AX=B108h
  333. --------X-1AB189-----------------------------
  334. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION WORD (32-bit)
  335.     AX = B189h
  336.     BH = bus number
  337.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  338.     DI = register number (0000h-00FFh)
  339. Return: as for AX=B109h
  340. Note:    the meanings of BL and BH on return were exchanged between the initial
  341.       drafts of the specification and final implementation
  342. SeeAlso: AX=B109h
  343. --------X-1AB18A-----------------------------
  344. INT 1A - Intel PCI BIOS v2.0c - READ CONFIGURATION DWORD (32-bit)
  345.     AX = B18Ah
  346.     BH = bus number
  347.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  348.     DI = register number (0000h-00FFh)
  349. Return: as for AX=B10Ah
  350. Note:    the meanings of BL and BH on return were exchanged between the initial
  351.       drafts of the specification and final implementation
  352. SeeAlso: AX=B10Ah
  353. --------X-1AB18B-----------------------------
  354. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION BYTE (32-bit)
  355.     AX = B18Bh
  356.     BH = bus number
  357.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  358.     DI = register number (0000h-00FFh)
  359.     CL = byte to write
  360. Return: as for AX=B10Bh
  361. Note:    the meanings of BL and BH on return were exchanged between the initial
  362.       drafts of the specification and final implementation
  363. SeeAlso: AX=B10Bh
  364. --------X-1AB18C-----------------------------
  365. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION WORD (32-bit)
  366.     AX = B18Ch
  367.     BH = bus number
  368.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  369.     DI = register number (multiple of 2 less than 0100h)
  370.     CX = word to write
  371. Return: as for AX=B10Ch
  372. Note:    the meanings of BL and BH on return were exchanged between the initial
  373.       drafts of the specification and final implementation
  374. SeeAlso: AX=B10Ch
  375. --------X-1AB18D-----------------------------
  376. INT 1A - Intel PCI BIOS v2.0c - WRITE CONFIGURATION DWORD (32-bit)
  377.     AX = B18Dh
  378.     BH = bus number
  379.     BL = device/function number (bits 7-3 device, bits 2-0 function)
  380.     DI = register number (multiple of 4 less than 0100h)
  381.     ECX = dword to write
  382. Return: as for AX=B10Dh
  383. Note:    the meanings of BL and BH on return were exchanged between the initial
  384.       drafts of the specification and final implementation
  385. SeeAlso: AX=B10Dh
  386. --------X-1AB400-----------------------------
  387. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - INSTALLATION CHECK
  388.     AX = B400h
  389. Return: CF clear if installed
  390.     AX = 0000h if installed
  391.         BH = ??? (02h)
  392.         BL = ??? (08h)
  393.         CX = ??? (0002h)
  394.         EDX = 47464341h ('GFCA', which is byte-swapped 'ACFG')
  395.         SI = ??? (001Fh)
  396. SeeAlso: AX=B401h,AX=B402h,AX=B403h,AX=B404h,AX=B405h,AX=B406h,AX=B407h
  397. SeeAlso: @xxxxh:xxxxh"Plug-and-Play"
  398.  
  399. (Table 0551)
  400. Values for Intel Plug-and-Play AUTO-CONFIGURATION error codes:
  401.  0000h    successful
  402.  0051h    ???
  403.  0055h    unable to read/write configuration table from/to nonvolatile storage
  404.  0056h    not a valid configuration table or wrong table version
  405.  0059h    buffer too small
  406.  FFFFh    ???
  407. --------X-1AB401-----------------------------
  408. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET DEFAULT CONFIG TABLE
  409.     AX = B401h
  410. Return: CF clear if successful
  411.         AX = 0000h
  412.         BX = maximum size of configuration table??? (1000h)
  413.         CX = ??? (2000h)
  414.         EDI = linear/physical address of ESCD table (see #0552)
  415.     CF set on error
  416.         AX = error code (see #0551)
  417. SeeAlso: AX=B400h,AX=B402h,@xxxxh:xxxxh"Plug-and-Play"
  418.  
  419. Format of Intel Plug-and-Play Extended System Configuration Data table:
  420. Offset    Size    Description    (Table 0552)
  421.  00h    WORD    total length of this table
  422.  02h  4 BYTEs    signature "ACFG"
  423.  06h    BYTE    minor version number
  424.  07h    BYTE    major version number (currently 02h)
  425.  08h    BYTE    number of boards listed in the configuration data
  426.  09h  3 BYTEs    reserved (00h)
  427.  0Ch    var    board data
  428.     WORD    checksum
  429. Notes:    this table contains information about the standard devices in the
  430.       system, such as serial ports, parallel ports, etc.  For each device,
  431.       it includes at least the I/O port address (03F8h,02F8h,0378h,etc).
  432.     the sum of all words in the table, including the checksum field (with
  433.       implied zero padding if the length is odd), must equal 0000h
  434. SeeAlso: #0553
  435.  
  436. Format of Extended System Configuration Data Board Header:
  437. Offset    Size    Description    (Table 0553)
  438.  00h    WORD    length of this header in bytes
  439.  02h    BYTE    slot number
  440.         00h motherboard
  441.         01h-0Fh ISA/EISA
  442.         10h-40h    PCI
  443.  03h    BYTE    reserved (00h)
  444. SeeAlso: #0552,#0554
  445.  
  446. Format of Extended System Configuration Data Freeform Board Header:
  447. Offset    Size    Description    (Table 0554)
  448.  00h  4 BYTEs    signature "ACFG"
  449.  04h    BYTE    minor version number
  450.  05h    BYTE    major version number (currently 02h)
  451.  06h    BYTE    board type
  452.         01h ISA
  453.         02h EISA
  454.         04h PCI
  455.         08h PCMCIA
  456.         10h PnPISA
  457.         20h MCA
  458.  07h    BYTE    reserved (00h)
  459.  08h    WORD    disabled functions (bit N set = function N disabled)
  460.  0Ah    WORD    configuration error functions
  461.  0Ch    WORD    reconfigurable functions (bit N set = function N reconfig'able)
  462.  0Eh  2 BYTEs    reserved (00h)
  463. SeeAlso: #0557,#0558
  464.  
  465. Format of Extended System Configuration Data Freeform PCI Device Data:
  466. Offset    Size    Description    (Table 0555)
  467.  00h    BYTE    PCI bus number
  468.  01h    BYTE    PCI device and function number
  469.  02h    WORD    PCI device identifier
  470.  04h    WORD    PCI vendor ID
  471.         1002h = ATI
  472.  06h  2 BYTEs    reserved (00h)
  473. SeeAlso: #0555,#0558
  474.  
  475. Format of Extended System Configuration Data Freeform PnP ISA Board ID:
  476. Offset    Size    Description    (Table 0556)
  477.  00h    DWORD    vendor ID (EISA device identifier)
  478.  04h    DWORD    serial number
  479. SeeAlso: #0556,#0557
  480.  
  481. Format of Extended System Configuration Data PnP ISA ECD Extension Function:
  482. Offset    Size    Description    (Table 0557)
  483.  00h    WORD    001Eh (length of this structure)
  484.  02h    BYTE    01h (selection size)
  485.  03h    BYTE    00h (selection data)
  486.  04h    BYTE    C0h (function information byte) (see #0560)
  487.  05h    BYTE    18h (size of following free-format data)
  488.  06h 16 BYTEs    freeform board header (see #0554)
  489.  16h  8 BYTEs    Plug-and-Play board ID (see #0556)
  490. Note:    ECD = Extended Configuration Data; this structure must be the last
  491.       "function" for a particular ISA Plug-and-Play board
  492. SeeAlso: #0558
  493.  
  494. Format of Extended System Configuration Data PCI ECD Extension Function:
  495. Offset    Size    Description    (Table 0558)
  496.  00h    WORD    length of this structure (at least 001Eh, up to 0056h)
  497.  02h    BYTE    01h (selection size)
  498.  03h    BYTE    00h (selection data)
  499.  04h    BYTE    C0h (function information byte) (see #0560)
  500.  05h    BYTE    size of following free-format data (at least 18h, max 50h)
  501.  06h 16 BYTEs    freeform board header (see #0554)
  502.  16h 8N BYTEs    PCI board ID (see #0555) for one to eight boards
  503. Notes:    ECD = Extended Configuration Data; this structure must be the last
  504.       "function" for a particular PCI board
  505.     AMI BIOS v1.00.05.AX1 sets the length field to 001Ch for entries with
  506.       a single board ID, apparently treating the field as the length of
  507.       the remainder of the structure instead of the full structure's length
  508. SeeAlso: #0557
  509.  
  510. Bitfields for EISA ID and Slot Information:
  511. Bit(s)    Description    (Table 0559)
  512.  3-0    selector among duplicate configuration file names (0000 if no dups)
  513.  5-4    slot type
  514.     00 expansion slot
  515.     01 embedded
  516.     10 virtual slot
  517.     11 reserved
  518.  6    ID is readable
  519.  7    duplicate IDs present
  520.  8    board can be disabled
  521.  9    IOCHKERR supported
  522.  10    board or entries locked
  523.  13-11    reserved
  524.  14    board does not have or need configuration file
  525.  15    configuration not complete
  526. SeeAlso: #0560
  527.  
  528. Bitfields for EISA Function Information:
  529. Bit(s)    Description    (Table 0560)
  530.  0    subtype data
  531.  1    memory information (see #0561)
  532.  2    IRQ information (see #0563)
  533.  3    DMA information (see #0564)
  534.  4    port range information (see #0565)
  535.  5    port initialization data (see #0566)
  536.  6    free form data
  537.  7    function disabled
  538. SeeAlso: #0557,#0558,#0559 
  539.  
  540. Format of EISA Memory Information:
  541. Offset    Size    Description    (Table 0561)
  542.  00h    WORD    memory information flags (see #0562)
  543.  02h  3 BYTEs    high 24 bits of memory start address (LSB first)
  544.  05h    WORD    memory size in K (0000h = 65536K)
  545. SeeAlso: #0560
  546.  
  547. Bitfields for EISA Memory Information Flags:
  548. Bit(s)    Description    (Table 0562)
  549.  0    writable (RAM rather than ROM)
  550.  1    cached
  551.  2    write-back cache rather than write-through
  552.  4-3    memory type
  553.     00 system
  554.     01 expantion
  555.     10 virtual
  556.     11 other
  557.  5    shared
  558.  6    reserved (0)
  559.  7    more entries follow
  560.  9-8    memory width
  561.     00 byte
  562.     01 word
  563.     10 dword
  564.     11 reserved
  565.  11-10    decoded address lines
  566.     00 = 20
  567.     01 = 24
  568.     10 = 32
  569.     11 reserved
  570.  15-12    reserved (0)
  571. SeeAlso: #0561
  572.  
  573. Bitfields for EISA IRQ Information:
  574. Bit(s)    Description    (Table 0563)
  575.  3-0    IRQ number
  576.  4    reserved (0)
  577.  5    IRQ triggering (0 = edge, 1 = level)
  578.  6    IRQ is shareable
  579.  7    more entries follow
  580.  15-8    reserved (0)
  581. SeeAlso: #0560
  582.  
  583. Bitfields for EISA DMA Information:
  584. Bit(s)    Description    (Table 0564)
  585.  2-0    DMA channel number
  586.  5-3    reserved (0)
  587.  6    shareable
  588.  7    more entries follow
  589.  9-8    reserved
  590.  11-10    DMA transfer size
  591.     00 byte
  592.     01 word
  593.     10 dword
  594.     11 word, but count in bytes
  595.  13-12    DMA timing
  596.     00 ISA-compatible
  597.     01 EISA type "A"
  598.     10 EISA type "B"
  599.     11 EISA type "C"/"F" (burst)
  600.  15-14    reserved (0)
  601. SeeAlso: #0560
  602.  
  603. Format of EISA Port Range Information:
  604. Offset    Size    Description    (Table 0565)
  605.  00h    BYTE    port description
  606.         bits 4-0: number of sequential ports
  607.         bit 5 reserved (0)
  608.         bit 6: shareable
  609.         bit 7: more entries follow
  610.  01h    WORD    I/O port address
  611. SeeAlso: #0560,#0566
  612.  
  613. Format of EISA Port Initialization Data:
  614. Offset    Size    Description    (Table 0566)
  615.  00h    BYTE    flags
  616.         bits 1-0: port size
  617.             00 byte
  618.             01 word
  619.             10 dword
  620.             11 reserved
  621.         bit 2: masked write
  622.         bits 6-3 reserved (0)
  623.         bit 7: more entries follow
  624.  01h    ???
  625. SeeAlso: #0560,#0565
  626. --------X-1AB402-----------------------------
  627. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - COPY AND VERIFY CONFIG TABLE
  628.     AX = B402h
  629.     DS:SI -> configuration table (see #0552)
  630.     ES:DI -> buffer for copy of configuration table
  631. Return: CF clear if successful
  632.         AX = 0000h
  633.     CF set on error
  634.         AX = error code (0055h,0056h) (see #0551)
  635. Note:    the buffer pointed at by ES:DI must be at least as large as the
  636.       maximum configuration table size reported by AX=B401h
  637. SeeAlso: AX=B400h,AX=B401h
  638. --------X-1AB403-----------------------------
  639. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - ???
  640.     AX = B403h
  641.     DS:SI -> configuration table (see #0552)
  642. Return: CF clear if successful
  643.         AX = 0000h
  644.     CF set on error
  645.         AX = error code (0055h) (see #0551)
  646. Note:    sets the configuration table's checksum field, then ???
  647. SeeAlso: AX=B400h
  648. --------X-1AB404-----------------------------
  649. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - ???
  650.     AX = B404h
  651.     BX = ???
  652. Return: CF clear if successful
  653.         AX = 0000h
  654.         BX = ???
  655.         CX = ???
  656.         DX = ???
  657.     CF set on error
  658.         AX = error code (0051h) (see #0551)
  659. SeeAlso: AX=B400h
  660. --------X-1AB405-----------------------------
  661. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET ???
  662.     AX = B405h
  663. Return: AX = ??? (0008h)
  664. SeeAlso: AX=B400h
  665. --------X-1AB406-----------------------------
  666. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - GET ???
  667.     AX = B406h
  668.     ES:DI -> ??? header (see #0567)
  669. Return: CF clear if successful
  670.         AX = 0000h
  671.         WORD ES:[DI] = size of returned data
  672.     CF set on error
  673.         AX = error code (0059h) (see #0551)
  674.         WORD ES:[DI] = required size of buffer
  675. SeeAlso: AX=B400h
  676.  
  677. Format of Intel Plug-and-Play AUTO-CONFIGURATION ??? header:
  678. Offset    Size    Description    (Table 0567)
  679.  00h    WORD    length of structure buffer
  680.  02h    DWORD    -> structure array buffer (see #0568)
  681.  
  682. Format of Intel Plug-and-Play AUTO-CONFIGURATION ??? structure entry [array]:
  683. Offset    Size    Description    (Table 0568)
  684.  00h    BYTE    ???
  685.  01h    BYTE    ???
  686.  02h    BYTE    ???
  687.  03h    WORD    ???
  688.  05h    BYTE    ???
  689.  06h    WORD    ???
  690.  08h    BYTE    ???
  691.  09h    WORD    ???
  692.  0Bh    BYTE    ???
  693.  0Ch    WORD    ???
  694.  0Eh    WORD    ???
  695. SeeAlso: #0567
  696. --------X-1AB407-----------------------------
  697. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - ???
  698.     AX = B407h
  699.     EDX = length of ???
  700.     EDI = physical address of ???
  701. Return: CF clear if successful
  702.         AX = 0000h
  703.         EDI = ???
  704.     CF set on error
  705.         AX = error code (FFFFh) (see #0551)
  706. Note:    returns error if EDI < 000C0000h
  707. SeeAlso: AX=B400h
  708. --------X-1AB4-------------------------------
  709. INT 1A - Intel Plug-and-Play AUTO-CONFIGURATION - 32-BIT API
  710.     AH = B4h
  711.     AL = function (80h-87h)
  712.     further details not yet available
  713. Note:    these functions are 32-bit versions of functions 00h-07h
  714. --------c-1AC0-------------------------------
  715. INT 1A U - Disk Spool II v2.07+ - ALTERNATE INSTALLATION CHECK
  716.     AH = C0h
  717. Return: (see AH=A0h)
  718. Notes:    this call is identical to AH=A0h
  719.     this function is also supported by Vertisoft's Emulaser utility ELSPL,
  720.       as that is a licensed version of Disk Spool II
  721. SeeAlso: AH=A0h,AH=ABh,AH=D0h
  722. --------U-1ACCCCBXCCCC-----------------------
  723. INT 1A U - DATEFIX - INSTALLATION CHECK
  724.     AX = CCCCh
  725.     BX = CCCCh
  726.     CX = 0000h
  727. Return: CX = CCCCh if installed
  728.         ES:BX -> original interrupt handler
  729. Program: DATEFIX is a public-domain TSR to correct the date on AT&T 6300
  730.       machines, where the realtime clock's calendar wraps after 1991
  731. SeeAlso: AH=FEh,AH=FFh"AT&T"
  732. --------c-1AD0-------------------------------
  733. INT 1A U - Disk Spool II v2.07+ - FUNCTION CALLS
  734.     AH = D0h
  735.     AL = function code
  736.         01h enable spooler and despooler
  737.         02h enable spooler only
  738.         03h enable despooler at beginning of file
  739.         04h disable the despooler
  740.         05h disable the despooler and spooler
  741.         06h clear the spool file
  742.         08h inhibit the popup menu
  743.         09h enable the popup menu
  744.         0Ah ??? (called by Disk Spool's INT 21 handler)
  745.         0Bh disable the spooler
  746.         0Ch start despooler after last successfully printed document
  747.         0Dh start despooler at the exact point where it last left off
  748.         0Eh pop up the menu
  749.         0Fh ???
  750.         11h start new spool file??? (called by Disk Spool's INT 21 handler
  751.             when a program terminates)
  752.         14h ???
  753.         15h delete despool file and reset ???
  754.         16h ??? (writes something to unknown file)
  755.         17h ??? (writes something to despool file, then reads something
  756.             else and ???)
  757.         18h ??? (reads something from despool file, and then ???)
  758.         19h ??? (creates/truncates spool file)
  759.         20h clear file pointed to by the despooler
  760.         21h ??? (writes something to unknown file)
  761.         22h ??? (writes something to spool file if spooler/despooler using
  762.             same file)
  763.         23h ??? (opens/creates unknown file, then ???)
  764.         30h ???
  765.         31h ???
  766.         32h beep
  767.         33h append CRLF to spool file???
  768.         34h ???
  769.         35h ???
  770.         36h ???
  771.         37h append CRLF to spool file and start a new spool file???
  772.         38h ???
  773.         40h ??? (v4.05)
  774.         41h ??? (v4.05)
  775.         51h ??? (called by Disk Spool's INT 21 handler)
  776.         52h ??? (called by Disk Spool's INT 21 handler)
  777.         57h ???
  778.         5Ah ??? (v4.05)
  779.         5Bh ??? (v4.05)
  780.         5Ch ??? (v4.05)
  781. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  782.       as that is a licensed version of Disk Spool II
  783. SeeAlso: AH=A0h,AH=ADh
  784. --------c-1AE0-------------------------------
  785. INT 1A - Disk Spool II v4.0x - ENABLE/DISABLE
  786.     AH = E0h
  787.     AL = subfunction
  788.         01h enable spooler
  789.         02h disable spooler
  790.         03h enable despooler
  791.         04h disable despooler
  792.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  793. Return: AH = status
  794.         00h successful
  795.         F0h printer port not managed by Disk Spool II
  796.         FFH failed
  797. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  798.       as that is a licensed version of Disk Spool II
  799. SeeAlso: AH=A0h,AH=E1h,AX=E301h,AX=E401h
  800. --------c-1AE1-------------------------------
  801. INT 1A - Disk Spool II v4.0x - GET STATUS
  802.     AH = E1h
  803.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  804. Return: AH = status
  805.         00h successful
  806.         CL = despooler state (00h disabled, 41h enabled)
  807.         CH = spooler state (00h disabled, 41h enabled)
  808.         DL = despooler activity (00h standing by, 41h printing)
  809.         ES:BX -> ASCIZ name of current spool file (or next if AutoSpool
  810.             or AutoDespool enabled)
  811.         ES:SI -> ASCIZ name of current despool file
  812.         ES:DI -> 3-byte file extension used by Disk Spool II
  813.         F0h printer port not managed by Disk Spool II
  814. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  815.       as that is a licensed version of Disk Spool II
  816. SeeAlso: AH=A0h,AH=E0h,AH=E2h
  817. ----------1AE11B-----------------------------
  818. INT 1A - TheGrab v4.60 - ???
  819.     AX = E11Bh
  820.     ???
  821. Return: ??? (may destroy all registers)
  822. SeeAlso: AX=E11Dh
  823. ----------1AE11D-----------------------------
  824. INT 1A - TheGrab v4.60 - INSTALLATION CHECK
  825.     AX = E11Dh
  826. Return: ES:DI -> signature block (see #0569) if installed
  827.         CX = length of signature block (000Fh)
  828. Program: TheGrab is a resident ANSI screen grabber bundled with TheDraw
  829. SeeAlso: AX=E11Bh
  830.  
  831. Format of TheGrab signature block:
  832. Offset    Size    Description    (Table 0569)
  833.  00h    BYTE    08h
  834.  01h  8 BYTEs    ASCIZ "THEGRAB"
  835.  09h  6 BYTEs    ??? (zeros)
  836. --------c-1AE2-------------------------------
  837. INT 1A - Disk Spool II v4.0x - GET SPOOL FILES
  838.     AH = E2h
  839.     AL = which
  840.         01h first
  841.         02h next (can only call after "first")
  842.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  843. Return: AH = status
  844.         00h successful
  845.         ES:BX -> ASCIZ filename
  846.         F0h no (more) spool files
  847.         FFh failed
  848. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  849.       as that is a licensed version of Disk Spool II
  850. SeeAlso: AH=E0h,AH=E1h
  851. --------c-1AE301-----------------------------
  852. INT 1A - Disk Spool II v4.0x - GET SPOOL FILE STATUS
  853.     AX = E301h
  854.     ES:BX -> ASCIZ filename (max 32 chars)
  855. Return: AH = status
  856.         00h successful
  857.         ES:SI -> spool file status record (see #0570)
  858.         F0h not a spool file
  859.         FFh failed
  860. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  861.       as that is a licensed version of Disk Spool II
  862. SeeAlso: AH=E0h,AX=E302h,AX=E401h
  863.  
  864. Format of Disk Spool II spool file status record:
  865. Offset    Size    Description    (Table 0570)
  866.  00h    BYTE    hour of creation or last update
  867.  01h    BYTE    minute of creation or last update
  868.  02h    BYTE    year-1980 of creation or last update
  869.  03h    BYTE    month of creation or last update
  870.  04h    BYTE    day of creation or last update
  871.  05h    BYTE    total number of copies to print
  872.  06h    BYTE    number of copies already printed
  873.  07h    BYTE    printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  874.  08h    BYTE    save status (00h delete after printing, 01h save)
  875.  09h    BYTE    file status
  876.         01h done printing, but being saved
  877.         02h on hold
  878.         03h queued for printing
  879.         04h being spooled
  880.         05h being despooled (i.e. printed)
  881.  0Ah 16 BYTEs    ASCIZ description
  882.  1Ah  2 WORDs    file size in bytes (high,low)
  883.  1Eh  2 WORDs    bytes left to print (high,low)
  884. --------c-1AE302-----------------------------
  885. INT 1A - Disk Spool II v4.0x - UPDATE SPOOL FILE
  886.     AX = E302h
  887.     ES:BX -> ASCIZ filename (max 32 chars)
  888.     ES:SI -> spool file status record (see #0570)
  889. Return: AH = status
  890.         00h successful
  891.         F0h not a spool file
  892.         FFh failed
  893. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  894.       as that is a licensed version of Disk Spool II
  895. SeeAlso: AH=E0h,AX=E301h,AX=E401h
  896. --------c-1AE401-----------------------------
  897. INT 1A - Disk Spool II v4.0x - SPOOL EXISTING FILE
  898.     AX = E401h
  899.     ES:BX -> ASCIZ filename (max 32 chars)
  900.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  901. Return: AH = status
  902.         00h successful
  903.         FFh failed
  904. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  905.       as that is a licensed version of Disk Spool II
  906. SeeAlso: AH=E1h,AX=E302h,AX=E402h
  907. --------c-1AE402-----------------------------
  908. INT 1A U - Disk Spool II v4.0x - SPOOL EXISTING FILE???
  909.     AX = E402h
  910.     ES:BX -> ASCIZ filename (max 32 chars)
  911.     CL = printer port (01h COM1, 02h COM2, 05h LPT1, 06h LPT2)
  912. Return: AH = status
  913.         00h successful
  914.         FFh failed
  915. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  916.       as that is a licensed version of Disk Spool II
  917. SeeAlso: AH=E1h,AX=E302h,AX=E401h
  918. --------c-1AE5-------------------------------
  919. INT 1A U - Emulaser ELSPL.COM - ???
  920.     AH = E5h
  921.     ???
  922. Return: ???
  923. Program: ELSPL.COM is a licensed version of Disk Spool II which is distributed
  924.       as part of Vertisoft's Emulaser PostScript emulator
  925. SeeAlso: AH=A0h,INT 17/AH=03h
  926. --------c-1AEE-------------------------------
  927. INT 1A U - Disk Spool II v4.05 - ???
  928.     AH = EEh
  929.     AL = printer port???
  930.     ???
  931. Return: ???
  932. Note:    this function is also supported by Vertisoft's Emulaser utility ELSPL,
  933.       as that is a licensed version of Disk Spool II
  934. SeeAlso: AH=E1h
  935. --------U-1AF7-------------------------------
  936. INT 1A - RighTime v1.1 - TEMPORARILY DISABLE
  937.     AH = F7h
  938. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  939.       time to correct for clock drift
  940. Note:    any AH value from F0h-F7h or F9h-FEh will perform this function in
  941.       version 1.1, but F7h is the function called by transient portion
  942. SeeAlso: AH=F8h,AH=FFh"RighTime"
  943. --------U-1AF8-------------------------------
  944. INT 1A - RighTime v1.1 - ENABLE
  945.     AH = F8h
  946. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  947.       time to correct for clock drift
  948. Note:    RighTime is TeSseRact-compatible (see INT 2F/AX=5453h) and modifies its
  949.       TeSseRact program identifier based on its current state: "RighTime"
  950.       when enabled, "RighTim"F7h when disabled.
  951. SeeAlso: AH=F7h,AH=FFh"RighTime"
  952. --------b-1AFE-------------------------------
  953. INT 1A - AT&T 6300 - READ TIME AND DATE
  954.     AH = FEh
  955. Return: BX = day count (0 = Jan 1, 1984)
  956.     CH = hour
  957.     CL = minute
  958.     DH = second
  959.     DL = hundredths
  960. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FFh"AT&T",INT 21/AH=2Ah,INT 21/AH=2Ch
  961. --------b-1AFF-------------------------------
  962. INT 1A - AT&T 6300 - SET TIME AND DATE
  963.     AH = FFh
  964.     BX = day count (0 = Jan 1, 1984)
  965.     CH = hour
  966.     CL = minute
  967.     DH = second
  968.     DL = hundredths
  969. Return: ???
  970. SeeAlso: AX=CCCCh/BX=CCCCh,AH=FEh,INT 21/AH=2Bh,INT 21/AH=2Dh
  971. --------U-1AFF-------------------------------
  972. INT 1A - RighTime v1.1 - PERMANENTLY DISABLE
  973.     AH = FFh
  974. Program: RighTime is a TSR by G.T. Becker which continuously adjusts the system
  975.       time to correct for clock drift
  976. Note:    upon being permanently disabled, RighTime closes the file handle
  977.       referencing its executable (which is updated with time correction
  978.       information every two minutes while RighTime is enabled).
  979. --------s-1AFF00-----------------------------
  980. INT 1A - SND - INSTALLATION CHECK???
  981.     AX = FF00h
  982. Return: AL = version??? (02h)
  983.     AH = busy flag (00h if not in a SND call, 01h if SND currently active)
  984. Note:    the SND API is also supported by IC (Internal Commands) v2.0, a
  985.       shareware TSR by Geoff Friesen which extends COMMAND.COM's internal
  986.       command set
  987. SeeAlso: AX=FF01h,AX=FF02h,AX=FF04h,AX=FF05h
  988. --------s-1AFF01-----------------------------
  989. INT 1A - SND - PAUSE
  990.     AX = FF01h
  991.     DX = number of clock ticks to delay
  992. Return: AH = status
  993.         00h successful
  994.         01h SND busy
  995. Notes:    if successful, execution returns to the caller after the delay expires;
  996.       if SND is busy, execution returns immediately
  997.     the IC v2.0 implementation of this API makes no special allowance for
  998.       time rollover at midnight, which can cause the delay to be over one
  999.       hour if this function is called just before the BIOS time count
  1000.       rolls over and the delay extends into the next day
  1001. SeeAlso: AX=FF00h,INT 15/AH=86h,INT 62/AX=0096h,INT 7F/AH=E8h,INT 80/BX=0009h
  1002. SeeAlso: INT E0/CL=BDh
  1003. --------s-1AFF02-----------------------------
  1004. INT 1A - SND - START SOUND
  1005.     AX = FF02h
  1006.     DX = frequency in Hertz (14h-FFFFh)
  1007. Return: AH = status
  1008.         00h successful
  1009.         01h SND busy
  1010. SeeAlso: AX=FF00h,AX=FF01h,AX=FF03h
  1011. --------s-1AFF03-----------------------------
  1012. INT 1A - SND - STOP SOUND
  1013.     AX = FF03h
  1014. Return: AH = status
  1015.         00h successful
  1016.         01h busy
  1017. Note:    turns off any sound currently being emitted by the PC's speaker unless
  1018.       SND is currently busy processing an API call (this includes
  1019.       background music).  Use AX=FF05h to stop the sound even if an API
  1020.       call is in progress.
  1021. SeeAlso: AX=FF00h,AX=FF02h,AX=FF05h
  1022. --------s-1AFF04-----------------------------
  1023. INT 1A - SND - PLAY MUSIC STRING IN BACKGROUND
  1024.     AX = FF04h
  1025.     DS:DX -> ASCIZ music string
  1026. Return: AH = status
  1027.         00h successful (music begins playing in background)
  1028.         01h busy
  1029. Note:    the music string accepted by SND is not the same as that accepted by
  1030.       BASIC and other programs which process music strings
  1031. SeeAlso: AX=FF00h,AX=FF05h,INT 80/BX=0006h
  1032. --------s-1AFF05-----------------------------
  1033. INT 1A - SND - UNCONDITIONALLY STOP SOUND
  1034.     AX = FF05h
  1035. Return: AH = 00h (successful)
  1036. Note:    this function is the same as AX=FF03h, but will stop the sound even if
  1037.       SND is currently busy, such as playing background music
  1038. SeeAlso: AX=FF00h,AX=FF03h,INT 80/BX=0007h
  1039. --------B-1B---------------------------------
  1040. INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
  1041. Desc:    this interrupt is automatically called when INT 09 determines that
  1042.       Control-Break has been pressed
  1043. Note:    normally points to a short routine in DOS which sets the Ctrl-C flag,
  1044.       thus invoking INT 23h the next time DOS checks for Ctrl-C.
  1045. SeeAlso: INT 23
  1046. --------B-1C---------------------------------
  1047. INT 1C - TIME - SYSTEM TIMER TICK
  1048. Desc:    this interrupt is automatically called on each clock tick by the INT 08
  1049.       handler
  1050. Notes:    this is the preferred interrupt to chain when a program needs to be
  1051.       invoked regularly
  1052.     not available on NEC 9800-series PCs
  1053. SeeAlso: INT 08,INT E2"PC Cluster"
  1054. --------B-1D---------------------------------
  1055. INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
  1056. Note:    the default parameter table (see #0571) is located at F000h:F0A4h for
  1057.       100% compatible BIOSes
  1058. SeeAlso: INT 10/AH=00h
  1059.  
  1060. Format of video parameters:
  1061. Offset    Size    Description    (Table 0571)
  1062.  00h 16 BYTEs    6845 register values for modes 00h and 01h
  1063.  10h 16 BYTEs    6845 register values for modes 02h and 03h
  1064.  20h 16 BYTEs    6845 register values for modes 04h and 05h
  1065.  30h 16 BYTEs    6845 register values for modes 06h and 07h
  1066.  40h    WORD    bytes in video buffer for modes 00h and 01h (0800h)
  1067.  42h    WORD    bytes in video buffer for modes 02h and 03h (1000h)
  1068.  44h    WORD    bytes in video buffer for modes 04h and 05h (4000h)
  1069.  46h    WORD    bytes in video buffer for mode 06h (4000h)
  1070.  48h  8 BYTEs    columns on screen for each of modes 00h through 07h
  1071.  50h  8 BYTEs    CRT controller mode bytes for each of modes 00h through 07h
  1072. Note:    QEMM v7.5 Stealth appears to copy only the first 40h bytes of this
  1073.       table into always-accessible memory
  1074. --------B-1E---------------------------------
  1075. INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
  1076. Note:    the default parameter table (see #0572) is located at F000h:EFC7h for
  1077.       100% compatible BIOSes
  1078. SeeAlso: INT 13/AH=0Fh,INT 41,INT 4D/AH=0Ah
  1079.  
  1080. Format of diskette parameter table:
  1081. Offset    Size    Description    (Table 0572)
  1082.  00h    BYTE    first specify byte
  1083.         bits 7-4: step rate
  1084.         bits 3-0: head unload time (0Fh = 240 ms)
  1085.  01h    BYTE    second specify byte
  1086.         bits 7-1: head load time (01h = 4 ms)
  1087.         bit    0: non-DMA mode (always 0)
  1088.  02h    BYTE    delay until motor turned off (in clock ticks)
  1089.  03h    BYTE    bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024)
  1090.  04h    BYTE    sectors per track
  1091.  05h    BYTE    length of gap between sectors (2Ah for 5.25", 1Bh for 3.5")
  1092.  06h    BYTE    data length (ignored if bytes-per-sector field nonzero)
  1093.  07h    BYTE    gap length when formatting (50h for 5.25", 6Ch for 3.5")
  1094.  08h    BYTE    format filler byte (default F6h)
  1095.  09h    BYTE    head settle time in milliseconds
  1096.  0Ah    BYTE    motor start time in 1/8 seconds
  1097. SeeAlso: #1878 at INT 4D/AH=09h
  1098. --------B-1F---------------------------------
  1099. INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
  1100. Desc:    this vector points at 1024 bytes of graphics data, 8 bytes for each
  1101.       character 80h-FFh
  1102. Note:    graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100%
  1103.       compatible BIOSes
  1104. SeeAlso: INT 10/AX=5000h,INT 43
  1105. --------b-1F12-------------------------------
  1106. INT 1F U - C&T "SuperState" BIOS - POWER OFF
  1107.     AH = 12h
  1108. Return: none
  1109. Note:    POWER OFF
  1110. --------b-1F17-------------------------------
  1111. INT 1F U - C&T "SuperState" BIOS - EXECUTE FAR PROC ROUTINE ON SuperState
  1112.     AH = 17h
  1113.     ES:DI -> far procedure
  1114. Return: all registers except AH,ES,DI
  1115. Note:    You can change the BIOS area (F000h:0000h - F000h:FFFFh) only through
  1116.       this function
  1117. --------b-1F19-------------------------------
  1118. INT 1F U - C&T "SuperState" BIOS - ENABLE AUTO WAKEUP AND SET TIME AND DATE
  1119.     AH = 19h
  1120.     AL = hour in BCD
  1121.     BH = minutes in BCD
  1122.     BL = seconds in BCD
  1123.     CH = year century in BCD (must be 19h)
  1124.     CL = year low in BCD
  1125.     DH = month in BCD
  1126.     DL = date in BCD
  1127. Return: CF clear
  1128. --------b-1F1C-------------------------------
  1129. INT 1F U - C&T "SuperState" BIOS - SET SUSPEND TIMEOUT
  1130.     AH = 1Ch
  1131.     BX = sec until suspend starts
  1132. Return: None       
  1133. --------b-1F1D-------------------------------
  1134. INT 1F U - C&T "SuperState" BIOS - SET SLEEP TIMEOUT
  1135.     AH = 1Dh
  1136.     BX = sec until sleep starts
  1137. Return: None       
  1138. --------J-1F90-------------------------------
  1139. INT 1F - NEC PC-9801 - COPY EXTENDED MEMORY
  1140.     AH = 90h
  1141.     ES:BX -> global descriptor table (see #0375 at INT 15/AH=87h)
  1142.     CX = number of bytes to copy
  1143.     SI = 0000h
  1144.     DI = 0000h
  1145. Return: CF clear if successful
  1146.     CF set on error
  1147.     ???
  1148. SeeAlso: INT 15/AH=87h
  1149. --------b-1FF5--BLFA-------------------------
  1150. INT 1F U - C&T "SuperState" BIOS - REQUEST PASSWORD INPUT
  1151.     AH = F5h
  1152.     BL = FAh
  1153. Return: none
  1154. Note:    this function will not return until the correct password is entered
  1155. SeeAlso: AH=F5h/BL=FDh,AX=F5h/BL=FEh
  1156. --------b-1FF5--BLFD-------------------------
  1157. INT 1F U - C&T "SuperState" BIOS - ENCRYPT PASSWORD
  1158.     AH = F5h
  1159.     BL = FDh
  1160.     CX:SI = input string
  1161.     DX:DI = encrypted string
  1162.     BH = length of input string
  1163. Return: CF set on error
  1164. SeeAlso: AH=F5h/BL=FAh,AX=F5h/BL=FEh
  1165. --------b-1FF5--BLFE-------------------------
  1166. INT 1F U - C&T "SuperState" BIOS - SET PASSWORD
  1167.     AH = F5h
  1168.     BL = FEh
  1169.     CX:SI -> input string
  1170.     BH = length of input string (if BH = 00h, clear password)
  1171. Return: CF set on error
  1172. Note:    the input string must be encrypted by INT 1Fh/AH=F5h/BL=FDh
  1173. SeeAlso: AH=F5h/BL=FDh,AX=F5h/BL=FFh
  1174. --------b-1FF5--BLFF-------------------------
  1175. INT 1F U - C&T "SuperState" BIOS - GET ENCRYPTED PASSWORD
  1176.     AH = F5h
  1177.     BL = FFh
  1178.     DX:DI = string buffer
  1179. Return: CF set on error
  1180.     CF clear if successful
  1181.         BH = length of input string (if BH = 00h, password is not valid)
  1182.         DX:DI -> encrypted password string
  1183. SeeAlso: AH=F5h/BL=FDh,AX=F5h/BL=FEh
  1184. --------b-1FFB-------------------------------
  1185. INT 1F U - C&T "SuperState" BIOS - GET/SET CPU SPEED
  1186.     AH = FBh
  1187.     BL = function 
  1188.         00h get CPU speed
  1189.         Return: AL = current CPU speed (00h = fast, 01h = slow)
  1190.         01h set CPU speed
  1191.         AL = new CPU speed (00h = fast, 01h = slow)
  1192. SeeAlso: AH=FCh/BL=00h
  1193. --------b-1FFC--BL00-------------------------
  1194. INT 1F U - C&T "SuperState" BIOS - GET ALARM STATUS
  1195.     AH = FCh
  1196.     BL = 00h
  1197. Return: AL = current alarm state (00h = disabled, 01h = enabled)
  1198. SeeAlso: AH=FCh/BL=01h,AH=FCh/BL=02h
  1199. --------b-1FFC--BL01-------------------------
  1200. INT 1F U - C&T "SuperState" BIOS - SET ALARM STATUS
  1201.     AH = FCh
  1202.     BL = 01h
  1203.     AL = new alarm state (00h = disabled, 01h = enabled)
  1204. SeeAlso: AH=FCh/BL=00h,AH=FCh/BL=03h
  1205. --------b-1FFC--BL02-------------------------
  1206. INT 1F U - C&T "SuperState" BIOS - GET ALARM TIME
  1207.     AH = FCh
  1208.     BL = 02h
  1209. Return: CH = hour by BCD
  1210.     CL = min by BCD
  1211.     DH = sec by BCD
  1212. SeeAlso: AH=FCh/BL=00h,AH=FCh/BL=03h,AH=FCh/BL=04h
  1213. --------b-1FFC--BL03-------------------------
  1214. INT 1F U - C&T "SuperState" BIOS - SET ALARM TIME
  1215.     AH = FCh
  1216.     BL = 03h
  1217.     CH = hour by BCD
  1218.     CL = min by BCD
  1219.     DH = sec by BCD
  1220. Return: CF set on error (incorrect time format or Alarm is not enable) 
  1221. SeeAlso: AH=FCh/BL=01h,AH=FCh/BL=02h,AH=FCh/BL=05h
  1222. --------b-1FFC--BL04-------------------------
  1223. INT 1F U - C&T "SuperState" BIOS - GET ALARM DATE
  1224.     AH = FCh
  1225.     BL = 04h
  1226. Return: CH = year century by BCD
  1227.     CL = year low by BCD
  1228.     DH = month by BCD
  1229.     DL = date by BCD
  1230. SeeAlso: AH=FCh/BL=02h,AH=FCh/BL=05h
  1231. --------b-1FFC--BL05-------------------------
  1232. INT 1F U - C&T "SuperState" BIOS - SET ALARM DATE
  1233.     AH = FCh
  1234.     BL = 05h
  1235.     CH = year century by BCD
  1236.     CL = year low by BCD
  1237.     DH = month by BCD
  1238.     DL = date by BCD
  1239. Return: CF set on error (incorrect date format or Alarm is not enable) 
  1240. SeeAlso: AH=FCh/BL=03h,AH=FCh/BL=04h
  1241. --------b-1FFD--BL00-------------------------
  1242. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP STATUS
  1243.     AH = FDh
  1244.     BL = 00h
  1245. Return: AL = current wake-up state (00h = disabled, 01h = enabled)
  1246. SeeAlso: AH=FDh/BL=01h,AH=FDh/BL=02h
  1247. --------b-1FFD--BL01-------------------------
  1248. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP STATUS
  1249.     AH = FDh
  1250.     BL = 01h
  1251.     AL = new wake-up state (00h = disabled, 01h = enabled)
  1252. SeeAlso: AH=FDh/BL=00h,AH=FDh/BL=03h
  1253. --------b-1FFD--BL02-------------------------
  1254. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP TIME
  1255.     AH = FDh
  1256.     BL = 02h
  1257. Return: CH = hour by BCD
  1258.     CL = min by BCD
  1259.     DH = sec by BCD
  1260. SeeAlso: AH=FDh/BL=00h,AH=FDh/BL=03h
  1261. --------b-1FFD-------------------------------
  1262. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP TIME
  1263.        AH = FDh
  1264.        BL = 3h
  1265.        CH = hour by BCD
  1266.        CL = min by BCD
  1267.        DH = sec by BCD
  1268. Return: CF set on error (incorrect Time format or Auto Wake up is not enable) 
  1269. SeeAlso: AH=FDh/BL=01h,AH=FDh/BL=02h
  1270. --------b-1FFD--BL04-------------------------
  1271. INT 1F U - C&T "SuperState" BIOS - GET AUTO WAKE UP DATE
  1272.     AH = FDh
  1273.     BL = 04h
  1274. Return: CH = year century in BCD
  1275.     CL = year low in BCD
  1276.     DH = month in BCD
  1277.     DL = date in BCD
  1278. SeeAlso: AH=FDh/BL=02h,AH=FDh/BL=05h
  1279. --------b-1FFD--BL05-------------------------
  1280. INT 1F U - C&T "SuperState" BIOS - SET AUTO WAKE UP DATE
  1281.     AH = FDh
  1282.     BL = 05h
  1283.     CH = year century in BCD
  1284.     CL = year low in BCD
  1285.     DH = month in BCD
  1286.     DL = date in BCD
  1287. Return: CF set on error (incorrect date format or Auto Wake up is not enable) 
  1288. SeeAlso: AH=FDh/BL=03h,AH=FDh/BL=04h
  1289. --------O-20---------------------------------
  1290. INT 20 - Minix - SEND/RECEIVE MESSAGE
  1291.     AX = process ID of other process
  1292.     BX -> message
  1293.     CX = operation (1 send, 2 receive, 3 send&receive)
  1294. Program: Minix is a Version 7 Unix-compatible operating system by Andrew
  1295.       Tanenbaum
  1296. Note:    the message contains the system call number (numbered as in V7
  1297.       Unix(tm)) and the call parameters
  1298. --------D-20---------------------------------
  1299. INT 20 - DOS 1+ - TERMINATE PROGRAM
  1300.     CS = PSP segment
  1301. Return: never
  1302. Note:    (see INT 21/AH=00h)
  1303. SeeAlso: INT 21/AH=00h,INT 21/AH=4Ch
  1304. --------G-20---------------------------------
  1305. INT 20 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE FIRMWARE DEBUGGER
  1306.     ???
  1307. Return: ???
  1308. SeeAlso: INT 21"COMTROL"
  1309. --------G-21---------------------------------
  1310. INT 21 - COMTROL HOSTESS i/ISA DEBUGGER - GET SEGMENT FOR CONTROL PROGRAM USE
  1311.     ???
  1312. Return: AX = first segment available for control program use
  1313. SeeAlso: INT 20"COMTROL",INT 22"COMTROL"
  1314. --------D-2100-------------------------------
  1315. INT 21 - DOS 1+ - TERMINATE PROGRAM
  1316.     AH = 00h
  1317.     CS = PSP segment
  1318. Notes:    Microsoft recommends using INT 21/AH=4Ch for DOS 2+
  1319.     execution continues at the address stored in INT 22 after DOS performs
  1320.       whatever cleanup it needs to do
  1321.     if the PSP is its own parent, the process's memory is not freed; if
  1322.       INT 22 additionally points into the terminating program, the
  1323.       process is effectively NOT terminated
  1324.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1325. SeeAlso: AH=26h,AH=31h,AH=4Ch,INT 20,INT 22
  1326. --------D-2101-------------------------------
  1327. INT 21 - DOS 1+ - READ CHARACTER FROM STANDARD INPUT, WITH ECHO
  1328.     AH = 01h
  1329. Return: AL = character read
  1330. Notes:    ^C/^Break are checked, and INT 23 executed if read
  1331.     character is echoed to standard output
  1332.     standard input is always the keyboard and standard output the screen
  1333.       under DOS 1.x, but they may be redirected under DOS 2+
  1334. SeeAlso: AH=06h,AH=07h,AH=08h,AH=0Ah
  1335. --------D-2102-------------------------------
  1336. INT 21 - DOS 1+ - WRITE CHARACTER TO STANDARD OUTPUT
  1337.     AH = 02h
  1338.     DL = character to write
  1339. Return: AL = last character output (despite the official docs which state
  1340.         nothing is returned) (at least DOS 3.3-5.0)
  1341. Notes:    ^C/^Break are checked, and INT 23 executed if pressed
  1342.     standard output is always the screen under DOS 1.x, but may be
  1343.       redirected under DOS 2+
  1344.     the last character output will be the character in DL unless DL=09h
  1345.       on entry, in which case AL=20h as tabs are expanded to blanks
  1346. SeeAlso: AH=06h,AH=09h
  1347. --------D-2103-------------------------------
  1348. INT 21 - DOS 1+ - READ CHARACTER FROM STDAUX
  1349.     AH = 03h
  1350. Return: AL = character read
  1351. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  1352.     STDAUX is usually the first serial port
  1353. SeeAlso: AH=04h,INT 14/AH=02h,INT E0/CL=03h
  1354. --------D-2104-------------------------------
  1355. INT 21 - DOS 1+ - WRITE CHARACTER TO STDAUX
  1356.     AH = 04h
  1357.     DL = character to write
  1358. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  1359.     STDAUX is usually the first serial port
  1360.     if STDAUX is busy, this function will wait until it becomes free
  1361. SeeAlso: AH=03h,INT 14/AH=01h,INT E0/CL=04h
  1362. --------D-2105-------------------------------
  1363. INT 21 - DOS 1+ - WRITE CHARACTER TO PRINTER
  1364.     AH = 05h
  1365.     DL = character to print
  1366. Notes:    keyboard checked for ^C/^Break, and INT 23 executed if detected
  1367.     STDPRN is usually the first parallel port, but may be redirected under
  1368.       DOS 2+
  1369.     if the printer is busy, this function will wait
  1370. SeeAlso: INT 17/AH=00h
  1371. --------D-2106-------------------------------
  1372. INT 21 - DOS 1+ - DIRECT CONSOLE OUTPUT
  1373.     AH = 06h
  1374.     DL = character (except FFh)
  1375. Return: AL = character output (despite official docs which state nothing is
  1376.         returned) (at least DOS 3.3-5.0)
  1377. Notes:    does not check ^C/^Break
  1378.     writes to standard output, which is always the screen under DOS 1.x,
  1379.       but may be redirected under DOS 2+
  1380. SeeAlso: AH=02h,AH=09h
  1381. --------D-2106--DLFF-------------------------
  1382. INT 21 - DOS 1+ - DIRECT CONSOLE INPUT
  1383.     AH = 06h
  1384.     DL = FFh
  1385. Return: ZF set if no character available
  1386.         AL = 00h
  1387.     ZF clear if character available
  1388.         AL = character read
  1389. Notes:    ^C/^Break are NOT checked
  1390.     if the returned character is 00h, the user pressed a key with an
  1391.       extended keycode, which will be returned by the next call of this
  1392.       function
  1393.     this function reads from standard input, which is always the keyboard
  1394.       under DOS 1.x, but may be redirected under DOS 2+
  1395.     although the return of AL=00h when no characters are available is not
  1396.       documented, some programs rely on this behavior
  1397. SeeAlso: AH=0Bh
  1398. --------D-2107-------------------------------
  1399. INT 21 - DOS 1+ - DIRECT CHARACTER INPUT, WITHOUT ECHO
  1400.     AH = 07h
  1401. Return: AL = character read from standard input
  1402. Notes:    does not check ^C/^Break
  1403.     standard input is always the keyboard under DOS 1.x, but may be
  1404.       redirected under DOS 2+
  1405.     if the interim console flag is set (see AX=6301h), partially-formed
  1406.       double-byte characters may be returned
  1407. SeeAlso: AH=01h,AH=06h,AH=08h,AH=0Ah
  1408. --------D-2108-------------------------------
  1409. INT 21 - DOS 1+ - CHARACTER INPUT WITHOUT ECHO
  1410.     AH = 08h
  1411. Return: AL = character read from standard input
  1412. Notes:    ^C/^Break are checked, and INT 23 executed if detected
  1413.     standard input is always the keyboard under DOS 1.x, but may be
  1414.       redirected under DOS 2+
  1415.     if the interim console flag is set (see AX=6301h), partially-formed
  1416.       double-byte characters may be returned
  1417. SeeAlso: AH=01h,AH=06h,AH=07h,AH=0Ah,AH=64h
  1418. --------D-2109-------------------------------
  1419. INT 21 - DOS 1+ - WRITE STRING TO STANDARD OUTPUT
  1420.     AH = 09h
  1421.     DS:DX -> '$'-terminated string
  1422. Return: AL = 24h (the '$' terminating the string, despite official docs which
  1423.         state that nothing is returned) (at least DOS 3.3-5.0)
  1424. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  1425.     standard output is always the screen under DOS 1.x, but may be
  1426.       redirected under DOS 2+
  1427.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  1428. SeeAlso: AH=02h,AH=06h"OUTPUT"
  1429. --------D-210A-------------------------------
  1430. INT 21 - DOS 1+ - BUFFERED INPUT
  1431.     AH = 0Ah
  1432.     DS:DX -> buffer (see #0573)
  1433. Return: buffer filled with user input
  1434. Notes:    ^C/^Break are checked, and INT 23 is called if either detected
  1435.     reads from standard input, which may be redirected under DOS 2+
  1436.     if the maximum buffer size (see #0573) is set to 00h, this call returns
  1437.       immediately without reading any input
  1438. SeeAlso: AH=0Ch,INT 2F/AX=4810h
  1439.  
  1440. Format of DOS input buffer:
  1441. Offset    Size    Description    (Table 0573)
  1442.  00h    BYTE    maximum characters buffer can hold
  1443.  01h    BYTE    (call) number of chars from last input which may be recalled
  1444.         (ret) number of characters actually read, excluding CR
  1445.  02h  N BYTEs    actual characters read, including the final carriage return
  1446. --------K-210A00-----------------------------
  1447. INT 21 - WCED v1.6+ - INSTALLATION CHECK
  1448.     AX = 0A00h
  1449.     DS:DX -> 6-byte buffer whose first two bytes must be 00h
  1450. Return: buffer offset 02h-05h filled with "Wced" if installed
  1451. Program: WCED is a free command-line editor and history utility by Stuart
  1452.       Russell
  1453. SeeAlso: AH=FFh"CED"
  1454. --------D-210B-------------------------------
  1455. INT 21 - DOS 1+ - GET STDIN STATUS
  1456.     AH = 0Bh
  1457. Return: AL = status
  1458.         00h if no character available
  1459.         FFh if character is available
  1460. Notes:    ^C/^Break are checked, and INT 23 is called if either pressed
  1461.     standard input is always the keyboard under DOS 1.x, but may be
  1462.       redirected under DOS 2+
  1463.     if the interim console flag is set (see AX=6301h), this function
  1464.       returns AL=FFh if a partially-formed double-byte character is
  1465.       available
  1466. SeeAlso: AH=06h"INPUT",AX=4406h
  1467. --------v-210B56-----------------------------
  1468. INT 21 - VIRUS - "Perfume" - INSTALLATION CHECK
  1469.     AX = 0B56h
  1470. Return: AX = 4952h if resident
  1471. SeeAlso: AX=0D20h,INT 12/AX=4350h/BX=4920h,INT 13/AH=F2h
  1472. --------D-210C-------------------------------
  1473. INT 21 - DOS 1+ - FLUSH BUFFER AND READ STANDARD INPUT
  1474.     AH = 0Ch
  1475.     AL = STDIN input function to execute after flushing buffer
  1476.     other registers as appropriate for the input function
  1477. Return: as appropriate for the specified input function
  1478. Note:    if AL is not one of 01h,06h,07h,08h, or 0Ah, the buffer is flushed but
  1479.       no input is attempted
  1480. SeeAlso: AH=01h,AH=06h"INPUT",AH=07h,AH=08h,AH=0Ah
  1481. --------D-210D-------------------------------
  1482. INT 21 - DOS 1+ - DISK RESET
  1483.     AH = 0Dh
  1484. Return: (DOS 6 only) CF clear (earlier versions preserve CF)
  1485. Notes:    This function writes all modified disk buffers to disk, but does not
  1486.       update the directory information (that is only done when files are
  1487.       closed or a SYNC call is issued)
  1488. SeeAlso: AX=5D01h,INT 13/AH=00h,INT 2F/AX=1120h
  1489. --------v-210D20-----------------------------
  1490. INT 21 - VIRUS - "Crazy Imp" - INSTALLATION CHECK
  1491.     AX = 0D20h
  1492. Return: AX = 1971h if resident
  1493. SeeAlso: AX=0B56h,AH=30h/DX=ABCDh
  1494. --------D-210E-------------------------------
  1495. INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
  1496.     AH = 0Eh
  1497.     DL = new default drive (00h = A:, 01h = B:, etc)
  1498. Return: AL = number of potentially valid drive letters
  1499. Notes:    under Novell NetWare, the return value is always 32, the number of
  1500.       drives that NetWare supports
  1501.     under DOS 3+, the return value is the greatest of 5, the value of
  1502.       LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
  1503.     on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
  1504.       may be accessed as either A: or B:
  1505.     otherwise, the return value is the highest drive actually present
  1506.     DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
  1507.       and 3+ a maximum of 26 drives
  1508. SeeAlso: AH=19h,AH=3Bh,AH=DBh
  1509. --------v-210E--DLAD-------------------------
  1510. INT 21 U - Novell DOS 7 - SDRes v27.03 - INSTALLATION CHECK
  1511.     AH = 0Eh
  1512.     DL = ADh
  1513. Return: AL = BAh if installed
  1514. Program: SDRes is the resident portion of the Search&Destroy antiviral by
  1515.       Fifth Generation Systems, as bundled with Novell DOS 7
  1516. Note:    SDRes will terminate programs which test for the presence of viruses
  1517.       using interrupt-based installation calls, saying that the program
  1518.       may be infected
  1519. SeeAlso: AH=0Eh/DL=AEh,AH=0Eh/DL=AFh,AH=4Ah/BX=00B6h,INT 13/AX=A759h
  1520. --------v-210E--DLAE-------------------------
  1521. INT 21 U - Novell DOS 7 - SDRes v27.03 - CLEAR ??? FLAG
  1522.     AH = 0Eh
  1523.     DL = AEh
  1524. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AFh,INT 13/AX=A759h
  1525. --------v-210E--DLAF-------------------------
  1526. INT 21 U - Novell DOS 7 - SDRes v27.03 - SET ??? FLAG
  1527.     AH = 0Eh
  1528.     DL = AFh
  1529. SeeAlso: AH=0Eh/DL=ADh,AH=0Eh/DL=AEh,INT 13/AX=A759h
  1530. --------D-210F-------------------------------
  1531. INT 21 - DOS 1+ - OPEN FILE USING FCB
  1532.     AH = 0Fh
  1533.     DS:DX -> unopened File Control Block (see #0574)
  1534. Return: AL = status
  1535.         00h successful
  1536.         FFh file not found or access denied
  1537. Notes:    (DOS 3.1+) file opened for read/write in compatibility mode
  1538.     an unopened FCB has the drive, filename, and extension fields filled
  1539.       in and all other bytes cleared
  1540.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1541.     DR-DOS checks password attached with AX=4303h
  1542. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  1543. SeeAlso: AH=10h,AH=16h,AH=3Dh,AX=4303h
  1544.  
  1545. Format of File Control Block:
  1546. Offset    Size    Description    (Table 0574)
  1547.  -7    BYTE    extended FCB if FFh
  1548.  -6   5 BYTEs    reserved
  1549.  -1    BYTE    file attribute if extended FCB
  1550.  00h    BYTE    drive number (0 = default, 1 = A, etc)
  1551.  01h  8 BYTEs    blank-padded file name
  1552.  09h  3 BYTEs    blank-padded file extension
  1553.  0Ch    WORD    current block number
  1554.  0Eh    WORD    logical record size
  1555.  10h    DWORD    file size
  1556.  14h    WORD    date of last write (see #0877 at AX=5700h)
  1557.  16h    WORD    time of last write (see #0876 at AX=5700h) (DOS 1.1+)
  1558.  18h  8 BYTEs    reserved (see #0575,#0576,#0577,#0578,#0579)
  1559.  20h    BYTE    record within current block
  1560.  21h    DWORD    random access record number (if record size is > 64 bytes, high
  1561.           byte is omitted)
  1562. Note:    to use an extended FCB, you must specify the address of the FFh flag at
  1563.       offset -7, rather than the address of the drive number field
  1564.  
  1565. Format of FCB reserved field for DOS 1.0:
  1566. Offset    Size    Description    (Table 0575)
  1567.  16h    WORD    location in directory (if high byte = FFh, low byte is device
  1568.           ID)
  1569.  18h    WORD    number of first cluster in file
  1570.  1Ah    WORD    current absolute cluster number on disk
  1571.  1Ch    WORD    current relative cluster number within file
  1572.         (0 = first cluster of file, 1 = second cluster, etc.)
  1573.  1Eh    BYTE    dirty flag (00h = not dirty)
  1574.  1Fh    BYTE    unused
  1575.  
  1576. Format of FCB reserved field for DOS 1.10-1.25:
  1577. Offset    Size    Description    (Table 0576)
  1578.  18h    BYTE    bit 7: set if logical device
  1579.         bit 6: not dirty
  1580.         bits 5-0: disk number or logical device ID
  1581.  19h    WORD    starting cluster number on disk
  1582.  1Bh    WORD    current absolute cluster number on disk
  1583.  1Dh    WORD    current relative cluster number within file
  1584.  1Fh    BYTE    unused
  1585.  
  1586. Format of FCB reserved field for DOS 2.x:
  1587. Offset    Size    Description    (Table 0577)
  1588.  18h    BYTE    bit 7: set if logical device
  1589.         bit 6: set if open???
  1590.         bits 5-0: ???
  1591.  19h    WORD    starting cluster number on disk
  1592.  1Bh    WORD    ???
  1593.  1Dh    BYTE    ???
  1594.  1Eh    BYTE    ???
  1595.  1Fh    BYTE    ???
  1596.  
  1597. Format of FCB reserved field for DOS 3.x:
  1598. Offset    Size    Description    (Table 0578)
  1599.  18h    BYTE    number of system file table entry for file
  1600.  19h    BYTE    attributes
  1601.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  1602.               01 = SHARE.EXE not loaded, character device
  1603.               10 = SHARE.EXE loaded, remote file
  1604.               11 = SHARE.EXE loaded, local file or device
  1605.         bits 5-0: low six bits of device attribute word
  1606. ---SHARE.EXE loaded, local file---
  1607.  1Ah    WORD    starting cluster of file on disk
  1608.  1Ch    WORD    (DOS 3.x) offset within SHARE of sharing record
  1609.           (see #0849 at AH=52h)
  1610.  1Eh    BYTE    file attribute
  1611.  1Fh    BYTE    ???
  1612. ---SHARE.EXE loaded, remote file---
  1613.  1Ah    WORD    number of sector containing directory entry
  1614.  1Ch    WORD    relative cluster within file of last cluster accessed
  1615.  1Eh    BYTE    absolute cluster number of last cluster accessed
  1616.  1Fh    BYTE    ???
  1617. ---SHARE.EXE not loaded---
  1618.  1Ah    BYTE    (low byte of device attribute word AND 0Ch) OR open mode
  1619.  1Bh    WORD    starting cluster of file
  1620.  1Dh    WORD    number of sector containing directory entry
  1621.  1Fh    BYTE    number of directory entry within sector
  1622. Note:    if FCB opened on character device, DWORD at 1Ah is set to the address
  1623.       of the device driver header, then the BYTE at 1Ah is overwritten.
  1624.  
  1625. Format of FCB reserved field for DOS 5.0:
  1626. Offset    Size    Description    (Table 0579)
  1627.  18h    BYTE    number of system file table entry for file
  1628.  19h    BYTE    attributes
  1629.         bits 7,6: 00 = SHARE.EXE not loaded, disk file
  1630.               01 = SHARE.EXE not loaded, character device
  1631.               10 = SHARE.EXE loaded, remote file
  1632.               11 = SHARE.EXE loaded, local file or device
  1633.         bits 5-0: low six bits of device attribute word
  1634. ---SHARE.EXE loaded, local file---
  1635.  1Ah    WORD    starting cluster of file on disk
  1636.  1Ch    WORD    unique sequence number of sharing record
  1637.  1Eh    BYTE    file attributes
  1638.  1Fh    BYTE    unused???
  1639. ---SHARE.EXE loaded, remote file---
  1640.  1Ah    WORD    network handle
  1641.  1Ch    DWORD    network ID
  1642. ---SHARE not loaded, local device---
  1643.  1Ah    DWORD    pointer to device driver header
  1644.  1Eh  2 BYTEs    unused???
  1645. ---SHARE not loaded, local file---
  1646.  1Ah    BYTE    extra info
  1647.         bit 7: read-only attribute from SFT
  1648.         bit 6: archive attribute from SFT
  1649.         bits 5-0: high bits of sector number
  1650.  1Bh    WORD    starting cluster of file
  1651.  1Dh    WORD    low word of sector number containing directory entry
  1652.  1Fh    BYTE    number of directory entry within sector
  1653. --------D-2110-------------------------------
  1654. INT 21 - DOS 1+ - CLOSE FILE USING FCB
  1655.     AH = 10h
  1656.     DS:DX -> File Control Block (see #0574)
  1657. Return: AL = status
  1658.         00h successful
  1659.         FFh failed
  1660. Notes:    a successful close forces all disk buffers used by the file to be
  1661.       written and the directory entry to be updated
  1662.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1663. SeeAlso: AH=0Fh,AH=16h,AH=3Eh
  1664. --------D-2111-------------------------------
  1665. INT 21 - DOS 1+ - FIND FIRST MATCHING FILE USING FCB
  1666.     AH = 11h
  1667.     DS:DX -> unopened FCB (see #0574), may contain '?' wildcards
  1668. Return: AL = status
  1669.         00h successful
  1670.         [DTA] unopened FCB for first matching file
  1671.         FFh no matching filename, or bad FCB
  1672. Notes:    the type of the returned FCB depends on whether the input FCB was a
  1673.       normal or an extended FCB
  1674.     the data returned in the DTA is actually the drive number (or extended
  1675.       FCB header and drive number) followed by the file's directory entry
  1676.       (see #0580); this format happens to be compatible with an unopened
  1677.       FCB
  1678.     for extended FCBs with search attribute 08h, the volume label (if any)
  1679.       will be returned even if the current directory is not the root dir.
  1680.     DOS 3+ also allows the '*' wildcard
  1681.     the search FCB must not be modified if AH=12h will be used to continue
  1682.       searching; DOS 3.3 has set the following parts of the FCB:
  1683.          0Ch    BYTE    ???
  1684.          0Dh    WORD    directory entry number of matching file
  1685.          0Fh    WORD    cluster number of current directory
  1686.          11h  4 BYTEs    ???
  1687.          15h    BYTE    drive number (1=A:)
  1688.     this function is used by many copy protection schemes to obtain the
  1689.       starting cluster of a file
  1690. SeeAlso: AH=12h,AH=1Ah,AH=4Eh,INT 2F/AX=111Bh
  1691.  
  1692. Format of DOS directory entry:
  1693. Offset    Size    Description    (Table 0580)
  1694.  00h  8 BYTEs    blank-padded filename
  1695.  08h  3 BYTEs    blank-padded file extension
  1696.  0Bh    BYTE    attributes
  1697.  0Ch 10 BYTEs    reserved
  1698.         used by DR-DOS to store file password
  1699.  16h    WORD    time of creation or last update (see #0876 at AX=5700h)
  1700.  18h    WORD    date of creation or last update (see #0877 at AX=5700h)
  1701.  1Ah    WORD    starting cluster number
  1702.  1Ch    DWORD    file size
  1703. --------D-2112-------------------------------
  1704. INT 21 - DOS 1+ - FIND NEXT MATCHING FILE USING FCB
  1705.     AH = 12h
  1706.     DS:DX -> unopened FCB (see #0574)
  1707. Return: AL = status
  1708.         00h successful
  1709.         [DTA] = unopened FCB
  1710.         FFh no more matching filenames
  1711. Note:    (see AH=11h)
  1712.     assumes that successful FindFirst executed on search FCB before call
  1713. SeeAlso: AH=1Ah,AH=4Fh,INT 2F/AX=111Ch
  1714. --------D-2113-------------------------------
  1715. INT 21 - DOS 1+ - DELETE FILE USING FCB
  1716.     AH = 13h
  1717.     DS:DX -> unopened FCB (see #0574), filename filled with template for
  1718.         deletion ('?' wildcards allowed)
  1719. Return: AL = status
  1720.         00h one or more files successfully deleted
  1721.         FFh no matching files or all were read-only or locked
  1722. Notes:    DOS 1.25+ deletes everything in the current directory (including
  1723.       subdirectories) and sets the first byte of the name to 00h (entry
  1724.       never used) instead of E5h if called on an extended FCB with
  1725.       filename '???????????' and bits 0-4 of the attribute set (bits 1 and
  1726.       2 for DOS 1.x).  This may have originally been an optimization to
  1727.       minimize directory searching after a mass deletion (DOS 1.25+ stop
  1728.       the directory search upon encountering a never-used entry), but can
  1729.       corrupt the filesystem under DOS 2+ because subdirectories are
  1730.       removed without deleting the files they contain.
  1731.     currently-open files should not be deleted
  1732.     MS-DOS allows deletion of read-only files with an extended FCB, whereas
  1733.       Novell NetWare, DR-DOS 6, and Novell DOS 7 do not
  1734. SeeAlso: AH=41h,INT 2F/AX=1113h
  1735. --------D-2114-------------------------------
  1736. INT 21 - DOS 1+ - SEQUENTIAL READ FROM FCB FILE
  1737.     AH = 14h
  1738.     DS:DX -> opened FCB (see #0574)
  1739. Return: AL = status
  1740.         00h successful
  1741.         01h end of file (no data)
  1742.         02h segment wrap in DTA
  1743.         03h end of file, partial record read
  1744.     [DTA] = record read from file
  1745. Notes:    reads a record of the size specified in the FCB beginning at the
  1746.       current file position, then updates the current block and current
  1747.       record fields in the FCB
  1748.     if a partial record was read, it is zero-padded to the full size
  1749.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1750. SeeAlso: AH=0Fh,AH=15h,AH=1Ah,AH=3Fh,INT 2F/AX=1108h
  1751. --------D-2115-------------------------------
  1752. INT 21 - DOS 1+ - SEQUENTIAL WRITE TO FCB FILE
  1753.     AH = 15h
  1754.     DS:DX -> opened FCB (see #0574)
  1755.     [DTA] = record to write
  1756. Return: AL = status
  1757.         00h successful
  1758.         01h disk full
  1759.         02h segment wrap in DTA
  1760. Notes:    writes a record of the size specified in the FCB beginning at the
  1761.       current file position, then updates the current block and current
  1762.       record fields in the FCB
  1763.     if less than a full sector is written, the data is placed in a DOS
  1764.       buffer to be written out at a later time
  1765.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1766. SeeAlso: AH=0Fh,AH=14h,AH=1Ah,AH=40h,INT 2F/AX=1109h
  1767. --------D-2116-------------------------------
  1768. INT 21 - DOS 1+ - CREATE OR TRUNCATE FILE USING FCB
  1769.     AH = 16h
  1770.     DS:DX -> unopened FCB (see #0574), wildcards not allowed
  1771. Return: AL = status
  1772.         00h successful
  1773.         FFh directory full or file exists and is read-only or locked
  1774. Notes:    if file already exists, it is truncated to zero length
  1775.     if an extended FCB is used, the file is given the attribute in the
  1776.       FCB; this is how to create a volume label in the disk's root dir
  1777.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1778. SeeAlso: AH=0Fh,AH=10h,AH=3Ch
  1779. --------D-2117-------------------------------
  1780. INT 21 - DOS 1+ - RENAME FILE USING FCB
  1781.     AH = 17h
  1782.     DS:DX -> modified FCB (see also #0574)
  1783.         the old filename ('?' wildcards OK) is in the standard location
  1784.         while the new filename ('?' wildcards OK) is stored in the 11
  1785.         bytes beginning at offset 11h
  1786. Return: AL = status
  1787.         00h successfully renamed
  1788.         FFh no matching files,file is read-only, or new name already exists
  1789. Notes:    subdirectories may be renamed using an extended FCB with the
  1790.       appropriate attribute, as may volume labels
  1791.     DR-DOS checks password attached with AX=4303h before permitting rename
  1792. SeeAlso: AH=0Fh,AH=13h,AX=4303h,AH=56h,INT 2F/AX=1111h
  1793. --------D-2118-------------------------------
  1794. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  1795.     AH = 18h
  1796. Return: AL = 00h
  1797. Note:    corresponds to the CP/M BDOS function "get bit map of logged drives",
  1798.       which is meaningless under MS-DOS
  1799. SeeAlso: AH=1Dh,AH=1Eh,AH=20h,AX=4459h,INT 60/DI=0513h
  1800. --------D-2119-------------------------------
  1801. INT 21 - DOS 1+ - GET CURRENT DEFAULT DRIVE
  1802.     AH = 19h
  1803. Return: AL = drive (00h = A:, 01h = B:, etc)
  1804. Note:    Novell NetWare uses the fact that DOS 2.x COMMAND.COM issues this call
  1805.       from a particular location every time it starts a command to
  1806.       determine when to issue an automatic EOJ
  1807. SeeAlso: AH=0Eh,AH=47h,AH=BBh
  1808. --------D-211A-------------------------------
  1809. INT 21 - DOS 1+ - SET DISK TRANSFER AREA ADDRESS
  1810.     AH = 1Ah
  1811.     DS:DX -> Disk Transfer Area (DTA)
  1812. Notes:    the DTA is set to PSP:0080h when a program is started
  1813.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  1814. SeeAlso: AH=11h,AH=12h,AH=2Fh,AH=4Eh,AH=4Fh
  1815. --------D-211B-------------------------------
  1816. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR DEFAULT DRIVE
  1817.     AH = 1Bh
  1818. Return: AL = sectors per cluster (allocation unit)
  1819.     CX = bytes per sector
  1820.     DX = total number of clusters
  1821.     DS:BX -> media ID byte (see #0581)
  1822. Note:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  1823.       versions return a pointer to a copy of the FAT's ID byte
  1824. SeeAlso: AH=1Ch,AH=36h
  1825.  
  1826. (Table 0581)
  1827. Values for media ID byte:
  1828.  FFh    floppy, double-sided, 8 sectors per track (320K)
  1829.  FEh    floppy, single-sided, 8 sectors per track (160K)
  1830.  FDh    floppy, double-sided, 9 sectors per track (360K)
  1831.  FCh    floppy, single-sided, 9 sectors per track (180K)
  1832.  FAh    HP 200LX D: ROM disk, 16 sectors per track (995K)
  1833.     HP 200LX E: (Stacker host drive ???)
  1834.  F9h    floppy, double-sided, 15 sectors per track (1.2M)
  1835.     floppy, double-sided, 9 sectors per track (720K,3.5")
  1836.  F8h    hard disk
  1837.  F0h    other media
  1838.     (e.g. floppy, double-sized, 18 sectors per track -- 1.44M,3.5")
  1839. --------D-211C-------------------------------
  1840. INT 21 - DOS 1+ - GET ALLOCATION INFORMATION FOR SPECIFIC DRIVE
  1841.     AH = 1Ch
  1842.     DL = drive (00h = default, 01h = A:, etc)
  1843. Return: AL = sectors per cluster (allocation unit), or FFh if invalid drive
  1844.     CX = bytes per sector
  1845.     DX = total number of clusters
  1846.     DS:BX -> media ID byte (see #0581)
  1847. Notes:    under DOS 1.x, DS:BX points at an actual copy of the FAT; later
  1848.       versions return a pointer to a copy of the FAT's ID byte
  1849.     on a DBLSPACE drive, the total number of clusters is based on the
  1850.       estimated compression ratio
  1851. SeeAlso: AH=1Bh,AH=36h
  1852. --------D-211D-------------------------------
  1853. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  1854.     AH = 1Dh
  1855. Return: AL = 00h
  1856. Note:    corresponds to the CP/M BDOS function "get bit map of read-only
  1857.       drives", which is meaningless under MS-DOS
  1858. SeeAlso: AH=18h,AH=1Eh,AH=20h,AX=4459h
  1859. --------D-211E-------------------------------
  1860. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  1861.     AH = 1Eh
  1862. Return: AL = 00h
  1863. Note:    corresponds to the CP/M BDOS function "set file attributes" which was
  1864.      meaningless under MS-DOS 1.x
  1865. SeeAlso: AH=18h,AH=1Dh,AH=20h
  1866. --------D-211F-------------------------------
  1867. INT 21 - DOS 1+ - GET DRIVE PARAMETER BLOCK FOR DEFAULT DRIVE
  1868.     AH = 1Fh
  1869. Return: AL = status
  1870.         00h successful
  1871.         DS:BX -> Drive Parameter Block (DPB) (see #0582 for DOS 1.x,
  1872.             AH=32h for DOS 2+)
  1873.         FFh invalid drive
  1874. Note:    this call was undocumented prior to the release of DOS 5.0; however,
  1875.       only the DOS 4+ version of the DPB has been documented
  1876. SeeAlso: AH=32h
  1877.  
  1878. Format of DOS 1.1 and MS-DOS 1.25 drive parameter block:
  1879. Offset    Size    Description    (Table 0582)
  1880.  00h    BYTE    sequential device ID
  1881.  01h    BYTE    logical drive number (0=A:)
  1882.  02h    WORD    bytes per sector
  1883.  04h    BYTE    highest sector number within a cluster
  1884.  05h    BYTE    shift count to convert clusters into sectors
  1885.  06h    WORD    starting sector number of first FAT
  1886.  08h    BYTE    number of copies of FAT
  1887.  09h    WORD    number of directory entries
  1888.  0Bh    WORD    number of first data sector
  1889.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  1890.  0Fh    BYTE    sectors per FAT
  1891.  10h    WORD    starting sector of directory
  1892.  12h    WORD    address of allocation table
  1893. Note:    the DOS 1.0 table is the same except that the first and last fields
  1894.       are missing; see INT 21/AH=32h for the DOS 2+ version
  1895. --------D-2120-------------------------------
  1896. INT 21 - DOS 1+ - NULL FUNCTION FOR CP/M COMPATIBILITY
  1897.     AH = 20h
  1898. Return: AL = 00h
  1899. Note:    corresponds to the CP/M BDOS function "get/set default user
  1900.       (sublibrary) number", which is meaningless under MS-DOS
  1901. SeeAlso: AH=18h,AH=1Dh,AH=1Eh,AX=4459h
  1902. --------D-2121-------------------------------
  1903. INT 21 - DOS 1+ - READ RANDOM RECORD FROM FCB FILE
  1904.     AH = 21h
  1905.     DS:DX -> opened FCB (see #0574)
  1906. Return: AL = status
  1907.         00h successful
  1908.         01h end of file, no data read
  1909.         02h segment wrap in DTA, no data read
  1910.         03h end of file, partial record read
  1911.     [DTA] = record read from file
  1912. Notes:    the record is read from the current file position as specified by the
  1913.       random record and record size fields of the FCB
  1914.     the file position is not updated after reading the record
  1915.     if a partial record is read, it is zero-padded to the full size
  1916.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1917. SeeAlso: AH=14h,AH=22h,AH=27h,AH=3Fh
  1918. --------D-2122-------------------------------
  1919. INT 21 - DOS 1+ - WRITE RANDOM RECORD TO FCB FILE
  1920.     AH = 22h
  1921.     DS:DX -> opened FCB (see #0574)
  1922.     [DTA] = record to write
  1923. Return: AL = status
  1924.         00h successful
  1925.         01h disk full
  1926.         02h segment wrap in DTA
  1927. Notes:    the record is written to the current file position as specified by the
  1928.       random record and record size fields of the FCB
  1929.     the file position is not updated after writing the record
  1930.     if the record is located beyond the end of the file, the file is
  1931.       extended but the intervening data remains uninitialized
  1932.     if the record only partially fills a disk sector, it is copied to a
  1933.       DOS disk buffer to be written out to disk at a later time
  1934.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1935. SeeAlso: AH=15h,AH=21h,AH=28h,AH=40h
  1936. --------D-2123-------------------------------
  1937. INT 21 - DOS 1+ - GET FILE SIZE FOR FCB
  1938.     AH = 23h
  1939.     DS:DX -> unopened FCB (see #0574), wildcards not allowed
  1940. Return: AL = status
  1941.         00h successful (matching file found)
  1942.         FCB random record field filled with size in records, rounded up
  1943.         to next full record
  1944.         FFh failed (no matching file found)
  1945. Notes:    not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1946.     MS-DOS returns nonsense if the FCB record number field is set to a very
  1947.       large positive number, and status FFh if negative; DR-DOS returns the
  1948.       correct file size in both cases
  1949. BUG:    APPEND for DOS 3.3+ corrupts DX if the file is not found
  1950. SeeAlso: AH=42h
  1951. --------D-2124-------------------------------
  1952. INT 21 - DOS 1+ - SET RANDOM RECORD NUMBER FOR FCB
  1953.     AH = 24h
  1954.     DS:DX -> opened FCB (see #0574)
  1955. Notes:    computes the random record number corresponding to the current record
  1956.       number and record size, then stores the result in the FCB
  1957.     normally used when switching from sequential to random access
  1958.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  1959. SeeAlso: AH=21h,AH=27h,AH=42h
  1960. --------D-2125-------------------------------
  1961. INT 21 - DOS 1+ - SET INTERRUPT VECTOR
  1962.     AH = 25h
  1963.     AL = interrupt number
  1964.     DS:DX -> new interrupt handler
  1965. Notes:    this function is preferred over direct modification of the interrupt
  1966.       vector table
  1967.     some DOS extenders place an API on this function, as it is not
  1968.       directly meaningful in protected mode
  1969.     under DR-DOS 5.0+, this function does not use any of the DOS-internal
  1970.       stacks and may thus be called at any time
  1971.     Novell NetWare (except the new DOS Requester) monitors the offset of
  1972.       any INT 24 set, and if equal to the value at startup, substitutes
  1973.       its own handler to allow handling of network errors; this introduces
  1974.       the potential bug that any program whose INT 24 handler offset
  1975.       happens to be the same as COMMAND.COM's will not have its INT 24
  1976.       handler installed
  1977. SeeAlso: AX=2501h,AH=35h
  1978. --------E-212501-----------------------------
  1979. INT 21 P - Phar Lap 386/DOS-Extender - RESET DOS EXTENDER DATA STRUCTURES
  1980.     AX = 2501h
  1981.     SS = application's original SS or DS (FlashTek X-32VM)
  1982. Return: CF clear if successful
  1983.     CF set on error
  1984.         caller is operating on X-32 stack (FlashTek X-32VM)
  1985. Notes:    Phar Lap uses INT 21/AH=25h as the entry point for all 386/DOS-Extender
  1986.       system calls.     Only available when directly using 386/DOS-Extender or
  1987.       a compatible DOS extender, or when using a product that was created
  1988.       using 386-DOS/Extender or a compatible
  1989.     this function is also supported by FlashTek X-32VM
  1990. SeeAlso: AH=30h"Phar Lap"
  1991. --------E-212502-----------------------------
  1992. INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
  1993.     AX = 2502h
  1994.     CL = interrupt number
  1995. Return: CF clear
  1996.     ES:EBX = CS:EIP of protected-mode interrupt handler
  1997. Note:    this function is also supported by FlashTek X-32VM
  1998. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
  1999. --------E-212503-----------------------------
  2000. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
  2001.     AX = 2503h
  2002.     CL = interrupt number
  2003. Return: CF clear
  2004.     EBX = CS:IP of real-mode interrupt handler
  2005. Note:    this function is also supported by FlashTek X-32VM
  2006. SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
  2007. --------E-212504-----------------------------
  2008. INT 21 P - Phar Lap 386/DOS-Extender - SET PROTECTED-MODE INTERRUPT VECTOR
  2009.     AX = 2504h
  2010.     CL = interrupt number
  2011.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2012. Return: CF clear
  2013. Note:    this function is also supported by FlashTek X-32VM
  2014. SeeAlso: AX=2502h,AX=2505h,INT 31/AX=0205h
  2015. --------E-212505-----------------------------
  2016. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL-MODE INTERRUPT VECTOR
  2017.     AX = 2505h
  2018.     CL = interrupt number
  2019.     EBX = CS:IP of real-mode interrupt handler
  2020. Return: CF clear
  2021. Note:    this function is also supported by FlashTek X-32VM
  2022. SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0201h
  2023. --------E-212506-----------------------------
  2024. INT 21 P - Phar Lap 386/DOS-Extender - SET INT TO ALWAYS GAIN CNTRL IN PR. MODE
  2025.     AX = 2506h
  2026.     CL = interrupt number
  2027.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2028. Return: CF clear
  2029. Notes:    this function modifies both the real-mode low-memory interrupt
  2030.       vector table and the protected-mode Interrupt Descriptor Table (IDT)
  2031.     interrupts occurring in real mode are resignaled in protected mode
  2032.     this function is also supported by FlashTek X-32VM
  2033. --------E-212507-----------------------------
  2034. INT 21 P - Phar Lap 386/DOS-Extender - SET REAL- & PROTECTED-MODE INT VECTORS
  2035.     AX = 2507h
  2036.     CL = interrupt number
  2037.     DS:EDX = CS:EIP of protected-mode interrupt handler
  2038.     EBX = CS:IP of real-mode interrupt handler
  2039. Return: CF clear
  2040. Notes:    interrupts are disabled until both vectors have been modified
  2041.     this function is also supported by FlashTek X-32VM
  2042. SeeAlso: AX=2504h,AX=2505h
  2043. --------E-212508-----------------------------
  2044. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT LINEAR BASE ADDRESS
  2045.     AX = 2508h
  2046.     BX = segment selector
  2047. Return: CF clear if successful
  2048.         ECX = linear base address of segment
  2049.     CF set if invalid segment selector
  2050. Note:    this function is also supported by FlashTek X-32VM
  2051. SeeAlso: AX=2509h
  2052. --------E-212509-----------------------------
  2053. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT LINEAR TO PHYSICAL ADDRESS
  2054.     AX = 2509h
  2055.     EBX = linear address to convert
  2056. Return: CF clear if successful
  2057.         ECX = physical address (carry flag clear)
  2058.     CF set if linear address not mapped in page tables
  2059. SeeAlso: AX=2508h
  2060. --------E-212509-----------------------------
  2061. INT 21 P - FlashTek X-32VM - GET SYSTEM SEGMENTS AND SELECTORS
  2062.     AX = 2509h
  2063. Return: CF clear
  2064.     EAX high word = default DS
  2065.     AX = alias for 16-bit data segment
  2066.     BX = real mode code segment
  2067.     EDX high word = selector covering full 4GB address space
  2068.     DX = default SS
  2069.     ESI high word = PSP selector
  2070.     SI = environment selector
  2071. --------E-21250A-----------------------------
  2072. INT 21 P - Phar Lap 386/DOS-Extender - MAP PHYSICAL MEMORY AT END OF SEGMENT
  2073.     AX = 250Ah
  2074.     ES = segment selector in the Local Descriptor Table (LDT) of segment
  2075.          to modify
  2076.     EBX = physical base address of memory to map (multiple of 4K)
  2077.     ECX = number of physical 4K pages to map
  2078. Return: CF clear if successful
  2079.         EAX = 32-bit offset in segment of mapped memory
  2080.     CF set on error
  2081.         EAX = error code
  2082.         08h insufficient memory to create page tables
  2083.         09h invalid segment selector
  2084. SeeAlso: INT 31/AX=0800h
  2085. --------E-21250C-----------------------------
  2086. INT 21 P - Phar Lap 386/DOS-Extender - GET HARDWARE INTERRUPT VECTORS
  2087.     AX = 250Ch
  2088. Return: CF clear
  2089.     AL = base interrupt vector for IRQ0-IRQ7
  2090.     AH = base interrupt vector for IRQ8-IRQ15
  2091.     BL = interrupt vector for BIOS print screen function (Phar Lap only)
  2092. Note:    this function is also supported by FlashTek X-32VM
  2093. SeeAlso: INT 31/AX=0400h,INT 67/AX=DE0Ah
  2094. --------E-21250D-----------------------------
  2095. INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE LINK INFORMATION
  2096.     AX = 250Dh
  2097. Return: CF clear
  2098.     EAX = CS:IP of real-mode callback procedure (see #0583) that will
  2099.           call through from real mode to a protected-mode routine
  2100.     EBX = 32-bit real-mode address of intermode call data buffer
  2101.     ECX = size in bytes of intermode call data buffer
  2102.     ES:EDX = protected-mode address of intermode call data buffer
  2103. Notes:    this function is also supported by FlashTek X-32VM
  2104.     X-32VM guarantees the intermode buffer to be at least 4 KB
  2105. SeeAlso: AX=250Eh
  2106.  
  2107. (Table 0583)
  2108. Call Phar Lap real-mode callback with:
  2109.     STACK:    DWORD    offset to protected-mode code
  2110.         WORD    placeholder for protected-mode CS
  2111.         DWORD    pointer to selector structure (see #0584)
  2112.             or 0000h:0000h for defaults
  2113.         var    parameters for protected-mode procedure
  2114. Return: via FAR return
  2115.  
  2116. Format of Phar Lap selector structure:
  2117. Offset    Size    Description    (Table 0584)
  2118.  00h    WORD    protected-mode GS selector
  2119.  02h    WORD    protected-mode FS selector
  2120.  04h    WORD    protected-mode ES selector
  2121.  06h    WORD    protected-mode DS selector
  2122. --------E-21250E-----------------------------
  2123. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE
  2124.     AX = 250Eh
  2125.     EBX = CS:IP of real-mode procedure to call
  2126.     ECX = number of two-byte words to copy from protected-mode stack
  2127.           to real-mode stack
  2128. Return: CF clear if successful
  2129.         all segment registers unchanged
  2130.         all general registers contain values set by real-mode procedure
  2131.         all other flags set as they were left by real-mode procedure
  2132.         stack unchanged
  2133.     CF set on error
  2134.         EAX = error code
  2135.         01h not enough real-mode stack space
  2136. Note:    this function is also supported by FlashTek X-32VM; under X-32VM, the
  2137.       call will fail if ECX > 0000003Fh
  2138. SeeAlso: AX=250Dh,AX=2510h,AH=E1h"OS/286",INT 31/AX=0301h
  2139. --------E-21250F-----------------------------
  2140. INT 21 P - Phar Lap 386/DOS-Extender - CONVERT PROTECTED-MODE ADDRESS TO MS-DOS
  2141.     AX = 250Fh
  2142.     ES:EBX = 48-bit protected-mode address to convert
  2143.     ECX = 00000000h or length of data in bytes
  2144. Return: CF clear if successful (address < 1MB and contiguous)
  2145.         ECX = 32-bit real-mode MS-DOS address
  2146.     CF set on error (address >= 1MB or not contiguous)
  2147.         ECX = linear address
  2148. Note:    this function is also supported by FlashTek X-32VM
  2149. SeeAlso: AX=2510h
  2150. --------E-212510-----------------------------
  2151. INT 21 P - Phar Lap 386/DOS-Extender - CALL REAL-MODE PROCEDURE, REGISTERS
  2152.     AX = 2510h
  2153.     EBX = CS:IP of real-mode procedure to call
  2154.     ECX = number of two-byte words to copy to protected-mode stack to
  2155.           real-mode stack
  2156.     DS:EDX -> pointer to parameter block (see #0585)
  2157. Return: CF clear if successful
  2158.         all segment registers unchanged,
  2159.         EDX unchanged
  2160.         all other general registers contain values set by real-mode proc
  2161.         all other flags are set as they were left by real-mode procedure
  2162.         real-mode register values are returned in the parameter block
  2163.     CF set on error
  2164.         EAX = error code
  2165.         01h not enough real-mode stack space
  2166. Note:    unlike most of the preceding 25xxh functions, this one is not
  2167.       supported by FlashTek X-32VM
  2168. SeeAlso: AX=250Eh,AX=250Fh
  2169.  
  2170. Format of Phar Lap real-mode call parameter block:
  2171. Offset    Size    Description    (Table 0585)
  2172.  00h    WORD    real-mode DS value
  2173.  02h    WORD    real-mode ES value
  2174.  04h    WORD    real-mode FS value
  2175.  06h    WORD    real-mode GS value
  2176.  08h    DWORD    real-mode EAX value
  2177.  0Ch    DWORD    real-mode EBX value
  2178.  10h    DWORD    real-mode ECX value
  2179.  14h    DWORD    real-mode EDX value
  2180. --------E-212511-----------------------------
  2181. INT 21 P - Phar Lap 386/DOS-Extender - ISSUE REAL-MODE INTERRUPT
  2182.     AX = 2511h
  2183.     DS:EDX -> parameter block (see #0586)
  2184. Return: all segment registers unchanged
  2185.     EDX unchanged
  2186.     all other registers contain values set by the real-mode int handler
  2187.     the flags are set as they were left by the real-mode interrupt handler
  2188.     real-mode register values are returned in the parameter block
  2189. Note:    this function is also supported by FlashTek X-32VM
  2190. SeeAlso: AX=2503h,AX=2505h,AX=250Eh,AH=E3h"OS/286",INT 31/AX=0300h
  2191.  
  2192. Format of Phar Lap real-mode interrupt parameter block:
  2193. Offset    Size    Description    (Table 0586)
  2194.  00h    WORD    interrupt number
  2195.  02h    WORD    real-mode DS value
  2196.  04h    WORD    real-mode ES value
  2197.  06h    WORD    real-mode FS value
  2198.  08h    WORD    real-mode GS value
  2199.  0Ah    DWORD    real-mode EAX value
  2200.  0Eh    DWORD    real-mode EDX value
  2201. Note: all other real-mode values set from protected-mode registers
  2202. --------E-212512-----------------------------
  2203. INT 21 P - Phar Lap 386/DOS-Extender - LOAD PROGRAM FOR DEBUGGING
  2204.     AX = 2512h
  2205.     DS:EDX -> pointer to ASCIZ program name
  2206.     ES:EBX -> pointer to parameter block (see #0588)
  2207.     ECX = size in bytes of LDT buffer
  2208. Return: CF clear if successful
  2209.         EAX = number of segment descriptors in LDT
  2210.     CF set on error
  2211.         EAX = error code (see #0587)
  2212. SeeAlso: AX=2517h
  2213.  
  2214. (Table 0587)
  2215. Values for Phar Lap error code:
  2216.  02h    file not found or path invalid
  2217.  05h    access denied
  2218.  08h    insufficient memory
  2219.  0Ah    environment invalid
  2220.  0Bh    invalid file format
  2221.  80h    LDT too small
  2222.  
  2223. Format of Phar Lap program load parameter block:
  2224. Offset    Size    Description    (Table 0588)
  2225. Input:
  2226.  00h    DWORD    32-bit offset of environment string
  2227.  04h    WORD    segment of environment string
  2228.  06h    DWORD    32-bit offset of command-tail string
  2229.  0Ah    WORD    segment of command-tail string
  2230.  0Ch    DWORD    32-bit offset of LDT buffer (size in ECX)
  2231.  10h    WORD    segment of LDT buffer
  2232. Output:
  2233.  12h    WORD    real-mode paragraph address of PSP (see also AH=26h)
  2234.  14h    WORD    real/protected mode flag
  2235.         0000h  real mode
  2236.         0001h  protected mode
  2237.  16h    DWORD    initial EIP value
  2238.  1Ah    WORD    initial CS value
  2239.  1Ch    DWORD    initial ESP value
  2240.  20h    WORD    initial SS value
  2241.  22h    WORD    initial DS value
  2242.  24h    WORD    initial ES value
  2243.  26h    WORD    initial FS value
  2244.  28h    WORD    initial GS value
  2245. --------E-212513-----------------------------
  2246. INT 21 P - Phar Lap 386/DOS-Extender - ALIAS SEGMENT DESCRIPTOR
  2247.     AX = 2513h
  2248.     BX = segment selector of descriptor in GDT or LDT
  2249.     CL = access-rights byte for alias descriptor
  2250.     CH = use-type bit (USE16 or USE32) for alias descriptor
  2251. Return: CF clear if successful
  2252.         AX = segment selector for created alias
  2253.     CF set on error
  2254.         EAX = error code
  2255.         08h insufficient memory (can't grow LDT)
  2256.         09h invalid segment selector in BX
  2257. --------E-212514-----------------------------
  2258. INT 21 P - Phar Lap 386/DOS-Extender - CHANGE SEGMENT ATTRIBUTES
  2259.     AX = 2514h
  2260.     BX = segment selector of descriptor in GDT or LDT
  2261.     CL = new access-rights byte
  2262.     CH = new use-type bit (USE16 or USE32)
  2263. Return: CF clear if successful
  2264.     CF set on error
  2265.         EAX = error code
  2266.         09h invalid selector in BX
  2267. SeeAlso: AX=2515h,INT 31/AX=0009h
  2268. --------E-212515-----------------------------
  2269. INT 21 P - Phar Lap 386/DOS-Extender - GET SEGMENT ATTRIBUTES
  2270.     AX = 2515h
  2271.     BX = segment selector of descriptor in GDT or LDT
  2272. Return: CF clear if successful
  2273.         CL = access-rights byte for segment
  2274.         CH = use-type bit (USE16 or USE32)
  2275.     ECX<16-31> destroyed
  2276.     CF set on error
  2277.         EAX = error code
  2278.         09h invalid segment selector in BX
  2279. SeeAlso: AX=2514h
  2280. --------E-212516-----------------------------
  2281. INT 21 P - Phar Lap 386/DOS-Extender v2.2+ - FREE ALL MEMORY OWNED BY LDT
  2282.     AX = 2516h
  2283. Return: CF clear
  2284. Note:    this function must be called from Ring 0 or the CS descriptor is freed
  2285. --------E-212517-----------------------------
  2286. INT 21 P - Phar Lap 386/DOS-Extender v2.1c+ - GET INFO ON DOS DATA BUFFER
  2287.     AX = 2517h
  2288. Return: CF clear
  2289.     ES:EBX -> data buffer (protected mode address)
  2290.     ECX -> data buffer (real mode address)
  2291.     EDX = size of data buffer in bytes
  2292. Note:    the data buffer's address changes after calls to AX=2512h and AX=252Ah
  2293. SeeAlso: AX=2512h,AX=252Ah,AX=2530h
  2294. --------E-212518-----------------------------
  2295. INT 21 P - Phar Lap 386/DOS-Extender 2.1c+ - SPECIFY HANDLER FOR MOVED SEGMENTS
  2296.     AX = 2518h
  2297.     ES:EBX -> function to call when a segment is moved
  2298. Return: CF clear
  2299.     ES:EBX -> previous handler
  2300. --------E-212519-----------------------------
  2301. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET ADDITIONAL MEMORY ERROR INFO
  2302.     AX = 2519h
  2303. Return: CF clear
  2304.     EAX = error code
  2305.         0000h  no error
  2306.         0001h  out of physical memory
  2307.         0002h  out of swap space (unable to grow swap file)
  2308.         0003h  out of LDT entries and unable to grow LDT
  2309.         0004h  unable to change extended memory allocation mark
  2310.         FFFFFFFFh    paging disabled
  2311. Note:    VMM is the Virtual Memory Manager option
  2312. --------E-21251A-----------------------------
  2313. INT 21 P - Phar Lap 386/DOS-Extender VMM - LOCK PAGES IN MEMORY
  2314.     AX = 251Ah
  2315.     EDX = number of 4k pages to lock
  2316.     if BL = 00h
  2317.         ECX = linear address of first page to lock
  2318.     if BL = 01h
  2319.         ES:ECX -> pointer to first page to lock
  2320. Return: CF clear if successful
  2321.     CF set on error
  2322.         EAX = error code
  2323.         08h insufficient memory
  2324.         09h invalid address range
  2325. SeeAlso: AX=251Bh,AX=EB06h,INT 31/AX=0600h
  2326. --------E-21251B-----------------------------
  2327. INT 21 P - Phar Lap 386/DOS-Extender VMM - UNLOCK PAGES
  2328.     AX = 251Bh
  2329.     EDX = number of pages to unlock
  2330.     if BL = 00h
  2331.         ECX = linear address of first page to unlock
  2332.     if BL = 01h
  2333.         ES:ECX -> pointer to first page to unlock
  2334. Return: CF clear if successful
  2335.     CF set on error
  2336.         EAX = error code
  2337.         09h invalid address range
  2338. SeeAlso: AX=251Ah,AX=EB07h,INT 31/AX=0601h
  2339. --------E-21251C-----------------------------
  2340. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.1c+ - FREE PHYSICAL MEMORY PAGES
  2341.     AX = 251Ch
  2342.     BH = preservation flag (00h preserve contents, 01h discard contents)
  2343.     EDX = number of pages to free
  2344.     BL = address type
  2345.         00h linear address
  2346.         ECX = linear address of first page to be freed
  2347.         01h pointer
  2348.         ES:ECX -> first page to be freed
  2349. Return: CF clear if successful
  2350.     CF set on error
  2351.         EAX = error code
  2352.         08h memory error, swap space full, no VMM or DPMI
  2353.         09h invalid address
  2354. --------E-21251D-----------------------------
  2355. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - READ PAGE-TABLE ENTRY
  2356.     AX = 251Dh
  2357.     BL = address type
  2358.         00h linear address
  2359.         ECX = linear address of page table entry to read
  2360.         01h pointer
  2361.         ES:ECX -> page table entry to read
  2362. Return: CF clear if successful
  2363.         EAX = contents of page table entry
  2364.     CF set on error
  2365.         EAX = error code
  2366.         09h invalid address or NOPAGE option set
  2367.         78h invalid under DPMI
  2368. Note:    this function is obsolete; use AX=252Bh/BH=09h instead
  2369. SeeAlso: AX=251Eh,AX=252Bh/BH=09h,AX=EB00h,INT 31/AX=0506h
  2370. --------E-21251E-----------------------------
  2371. INT 21 OP - Phar Lap 386/DOS-Extender VMM v2.1c - WRITE PAGE-TABLE ENTRY
  2372.     AX = 251Eh
  2373.     BL = address type
  2374.         00h linear address
  2375.         ECX = linear address of page table entry to read
  2376.         01h pointer
  2377.         ES:ECX -> page table entry to read
  2378.     EDX = new value for page table entry
  2379. Return: CF clear if successful
  2380.     CF set on error
  2381.         EAX = error code
  2382.         09h invalid address or NOPAGE option set
  2383.         82h not compatible with DPMI
  2384. Note:    this call is obsolete; use AX=252Bh/BH=0Ah instead
  2385. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah,INT 31/AX=0507h
  2386. --------E-21251F-----------------------------
  2387. INT 21 P - Phar Lap 386/DOS-Extender VMM - EXHANGE TWO PAGE-TABLE ENTRIES
  2388.     AX = 251Fh
  2389.     BL = address type
  2390.         00h linear address
  2391.         ECX = linear address of first page table entry
  2392.         EDX = linear address of second page table entry
  2393.         01h pointer
  2394.         ES:ECX -> first page table entry
  2395.         ES:EDX -> second page table entry
  2396. Return: CF clear if successful
  2397.     CF set on error
  2398.         EAX = error code
  2399.         09h invalid address or NOPAGE option set
  2400.         82h not compatible with DPMI
  2401. SeeAlso: AX=251Dh,AX=251Eh
  2402. --------E-212520-----------------------------
  2403. INT 21 P - Phar Lap 386/DOS-Extender VMM - GET MEMORY STATISTICS
  2404.     AX = 2520h
  2405.     DS:EDX -> pointer to buffer at least 100 bytes in size (see #0589)
  2406.     BL = 0 (don't reset VM stats), 1 (reset VM stats)
  2407. Return: carry flag clear
  2408.  
  2409. Format of Phar Lap VM statistics buffer:
  2410. Offset    Size    Description    (Table 0589)
  2411.  00h    DWORD    VM status
  2412.         0001h VM subsystem is present
  2413.         0000h VM not present
  2414.  04h    DWORD    "nconvpg" number of conventional memory pages available
  2415.  08h    DWORD    "nbimpg" number of Compaq built-in memory pages available
  2416.  0Ch    DWORD    "nextpg" total number of extended memory pages
  2417.  10h    DWORD    "extlim" extender memory pages limit
  2418.  14h    DWORD    "aphyspg" number of physical memory pages allocated to appl
  2419.  18h    DWORD    "alockpg" number of locked pages owned by application
  2420.  1Ch    DWORD    "sysphyspg" number physical memory pages allocated to system
  2421.  20h    DWORD    "nfreepg" number of free physical pages; approx if EMS VCPI
  2422.  24h    DWORD    linear address of beginning of application address space
  2423.  28h    DWORD    linear address of end of application address space
  2424.  2Ch    DWORD    number of seconds since last time VM stats were reset
  2425.  30h    DWORD    number of page faults since last time
  2426.  34h    DWORD    number of pages written to swap file since last time
  2427.  38h    DWORD    number of reclaimed pages (page faults on swapped pages)
  2428.  3Ch    DWORD    number of virtual pages allocated to the application
  2429.  40h    DWORD    size in pages of swap file
  2430.  44h    DWORD    number of system pages allocated with EMS calls
  2431.  48h    DWORD    minimum number of conventional memory pages
  2432.  4Ch    DWORD    maximum size in pages to which swap file can be increased
  2433.  50h    DWORD    "vmflags"
  2434.         bit 0 = 1 if page fault in progress
  2435. ---v4.0+ ---
  2436.  54h    DWORD    number of physical pages guaranteed to be free
  2437.  58h    DWORD    number of free physical pages currently available
  2438.  5Ch    DWORD    size in pages of largest free block of memory (including disk
  2439.           swap space)
  2440.  60h    DWORD    reserved
  2441. --------E-212521-----------------------------
  2442. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S EXTENDED MEM USAGE
  2443.     AX = 2521h
  2444.     EBX = max 4k pages of physical extended memory which program may use
  2445. Return: CF clear if successful
  2446.        EBX = maximum limit in pages
  2447.        ECX = minimum limit in pages
  2448.     CF set on error
  2449.         EAX = error code
  2450.         08h insufficient memory or -nopage switch used
  2451. SeeAlso: AX=2522h
  2452. --------E-212522-----------------------------
  2453. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
  2454.     AX = 2522h
  2455.     ES:EBX -> alternate handler for page faults
  2456. Return: CF clear
  2457.     ES:EBX -> previous page-fault handler
  2458. SeeAlso: AX=2523h
  2459. --------E-212523-----------------------------
  2460. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY OUT-OF-SWAP-SPACE HANDLER
  2461.     AX = 2523h
  2462.     ???
  2463. Return: ???
  2464. Note:    this function takes a DWORD pointer and a DWORD pointer to a DWORD
  2465.       pointer as arguments
  2466. SeeAlso: AX=2522h
  2467. --------E-212524-----------------------------
  2468. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - INSTALL PAGE-REPLACEMENT HANDLERS
  2469.     AX = 2524h
  2470.     ???
  2471. Return: ???
  2472. Note:    this function takes three DWORD pointers and three DWORD pointers to
  2473.       DWORD pointers as arguments
  2474. --------E-212525-----------------------------
  2475. INT 21 P - Phar Lap 386/DOS-Extender VMM - LIMIT PROGRAM'S CONVENT'L MEM USAGE
  2476.     AX = 2525h
  2477.     EBX = limit in 4k pages of physical conventional memory which program
  2478.           may use
  2479. Return: CF clear if successful
  2480.         EBX = maximum limit in pages
  2481.         ECX = minimum limit in pages
  2482.     CF set on error
  2483.         EAX = error code
  2484.         08h insufficient memory or -nopage switch used
  2485. SeeAlso: AX=2521h
  2486. --------E-212526-----------------------------
  2487. INT 21 P - Phar Lap 386/DOS-Extender - GET CONFIGURATION INFORMATION
  2488.     AX = 2526h
  2489.     ???
  2490. Return: ???
  2491. Notes:    details are not yet available
  2492.     this function takes a pointer to the configuration buffer (see #0590)
  2493.       and a poitner to a BYTE as arguments
  2494.  
  2495. Format of Phar Lap configuration buffer:
  2496. Offset    Size    Description    (Table 0590)
  2497.  00h    DWORD    flags 1 (see #0591)
  2498.  04h    DWORD    flags 2 (unused through v5.0)
  2499.  08h    DWORD    flags 3 (unused through v5.0)
  2500.  0Ch    DWORD    386|DOS-Extender major version
  2501.  10h    DWORD    386|DOS-Extender minor version
  2502.  14h    DWORD    first letter of text after minor version number in version str
  2503.  18h    DWORD    beta flag (00h normal release, 01h beta release)
  2504.  1Ch    DWORD    processor (3 = 386, 4 = 486)
  2505.  20h    DWORD    coprocessor (4 = none, 6 = 287, 7 = 387/486)
  2506.  24h    DWORD    Weitek coprocessor flag (0 = none, 1 = present)
  2507.  28h    DWORD    machine type (0 = IBM PC compatible, 1 = NEC 9800 series)
  2508.  2Ch    DWORD    machine class
  2509.         IBM: bus type (0=ISA, 1=MCA, 2=XT, 3=EISA)
  2510.         NEC: 0=normal mode, 1=high-res mode
  2511.  30h    DWORD    VCPI flag (0 = none, 1 = present)
  2512.  34h    DWORD    -WEITEK/-1167 switch (0 = AUTO, 1 = ON, 2 = OFF)
  2513.  38h    DWORD    -MINREAL setting
  2514.  3Ch    DWORD    -MAXREAL setting
  2515.  40h    DWORD    -MINIBUF setting
  2516.  44h    DWORD    -MAXIBUF setting
  2517.  48h    DWORD    size in bytes of DOS call data buffer
  2518.  4Ch    DWORD    number of interrupt stacks (-NISTACK)
  2519.  50h    DWORD    interrupt stack size (-ISTKSIZE)
  2520.  54h    DWORD    -REALBREAK setting
  2521.  58h    DWORD    -CALLBUFS
  2522.  5Ch    DWORD    -HWIVEC
  2523.  60h    DWORD    -PRIVEC
  2524.  64h    DWORD    -INTMAP
  2525.  68h    DWORD    -PRIMAP
  2526.  6Ch    DWORD    VCPI: master 8259 interrupt vector base (IRQ0 mapping)
  2527.  70h    DWORD    VCPI: slave 8259 interrupt vector base (IRQ8 mapping)
  2528.  74h    DWORD    BIOS print screen interrupt vector (0 if NEC)
  2529.  78h    DWORD    -EXTLOW setting
  2530.  7Ch    DWORD    -EXTHIGH setting
  2531.  80h    DWORD    lowest physical extended-memory address allocatable
  2532.  84h    DWORD    highest physical extended-memory address allocatable + 1
  2533.  88h    DWORD    special memory's physical base address (00000000h if none)
  2534.  8Ch    DWORD    special memory size in bytes (00000000h if none)
  2535.  90h    DWORD    -MAXVCPIMEM setting
  2536.  94h    DWORD    -VSCAN
  2537.  98h    DWORD    -SWAPCHK (0 = OFF, 1 = ON, 2 = FORCE, 3 = MAX)
  2538.  9Ch    DWORD    -CODESIZE setting
  2539.  A0h    DWORD    minimum swap file size (-MINSWFSIZE)
  2540.  A4h    DWORD    maximum swap fiel size (-MAXSWFSIZE)
  2541.  A8h    DWORD    page replacement policy (0 = LFU, 1 = NUR)
  2542.  ACh    DWORD    number of GDT entries (-NGDTENT)
  2543.  B0h    DWORD    number of LDT entries (-NLDTENT)
  2544.  B4h    DWORD    program's privilege level (0-3)
  2545. ---386|DOS-Extender v3.0+ ---
  2546.  B8h    DWORD    -LOCKSTACK setting
  2547.  BCh    DWORD    -MAXEXTMEM
  2548.  C0h    DWORD    -MAXXMSMEM
  2549.  C4h    DWORD    -MAXPGMMEM
  2550.  C8h    DWORD    -DATATHRESHOLD
  2551.  CCh    DWORD    virtual memory manager flag (0 = not present, 1 = present)
  2552.  D0h    DWORD    Cyrix coprocessor flag (0 = no Cyrix EMC387, 1 = present)
  2553.  D4h    DWORD    -CYRIX setting (0 = AUTO, 1 = ON, 2 = OFF)
  2554.  D8h    DWORD    DPMI flag (0 = not present, 1 = present)
  2555.  DCh    DWORD    DPMI major version
  2556.  E0h    DWORD    DPMI minor version
  2557.  E4h    DWORD    DPMI capabilities flags (see #0592)
  2558.  E8h    DWORD    VCPI major version
  2559.  ECh    DWORD    VCPI minor version
  2560.  F0h    WORD    VCPI: IRQ0-7 physical base interrupt vector
  2561.  F2h    WORD    VCPI: IRQ8-15 physical base interrupt vector
  2562.  F4h    DWORD    XMS flag (0 = none, 1 = present)
  2563.  F8h    DWORD    XMS major version
  2564.  FCh    DWORD    XMS minor version
  2565. 100h    WORD    application's CS selector
  2566. 102h    WORD    application's DS selector
  2567. 104h    WORD    application's PSP selector
  2568. 106h    WORD    application's environment selector
  2569. 108h    WORD    selector mapping entire first megabyte
  2570. 10Ah    WORD    selector mapping text video memory
  2571. 10Ch    WORD    selector mapping video memory (text for IBM, graphics for NEC)
  2572. 10Eh    WORD    selector mapping Weitek address space, 0000h if not present
  2573. 110h    WORD    selector mapping Cyrix EMC387 address space, 0000h if none
  2574. 112h    WORD    reserved (0)
  2575. 114h    DWORD    real-mode FAR entry point to call to switch to protected mode
  2576.           with no saved context
  2577. 118h    DWORD    size of LDT in bytes
  2578. ---386|DOS-Extender v5.0+ ---
  2579. 11Ch    DWORD    Windows flag (0 = not present, 1 = Windows present)
  2580. 120h    DWORD    Windows major version
  2581. 124h    DWORD    Windows minor version
  2582. 128h    DWORD    Windows mode (0 = real/standard, 1 = enhanced)
  2583. 12Ch    DWORD    OS/2 flag (0 = not present, 1 = OS/2 present)
  2584. 130h    DWORD    OS/2 major version
  2585. 134h    DWORD    OS/2 minor version
  2586. 138h 50 DWORDs    reserved (0)
  2587.  
  2588. Bitfields for flags 1:
  2589. Bit(s)    Description    (Table 0591)
  2590.  0    -NOPAGE specified
  2591.  1    -A20 specified
  2592.  2    -VDISK specified
  2593.  3    -XT specified
  2594.  4    -AT specified
  2595.  5    -MCA specified
  2596.  6    -EISA specified
  2597.  7    -NORMRES specified (NEC only)
  2598.  8    -HIGHRES specified (NEC only)
  2599.  9    set if -SWFGROW1ST, clear if -NOSWFGROW1ST
  2600.  10    -NOVM specified
  2601.  11    -SAVEREGS specified
  2602.  12    unused (clear)
  2603.  13    -NOVCPI specified
  2604.  14    -NOMUL specified
  2605.  15    -NOBMCHK specified
  2606.  16    -NOSPCLMEM or -NOBIM
  2607.  17    -NOPGEXP specified
  2608.  18    -SWAPDEFDISK specified
  2609. ---v3.0+ ---
  2610.  19    -SAVEINTS specified
  2611.  20    -NOLOAD specified
  2612.  21    -PAGELOG specified
  2613.  22    -OPENDENY specified
  2614.  23    -ERRATA17 specified
  2615. ---v4.1+ ---
  2616.  24    -NESTDPMI specified
  2617.  25    -NONESTDPMI specified
  2618.  26    -NODPMI specified
  2619.  27    -NOPCDWEITEK specified
  2620. ---v4.2+ ---
  2621.  28    -WININT21 specified
  2622.  
  2623. Bitfields for DPMI capabilities flags:
  2624. Bit(s)    Description    (Table 0592)
  2625.  0    paging supported
  2626.  1    physical device mapping
  2627.  2    conventional memory mapping
  2628.  3    exceptions restartable
  2629. --------E-212527-----------------------------
  2630. INT 21 P - Phar Lap 386/DOS-Extender VMM - EN/DISABLE STATE SAVE ON INTERRUPTS
  2631.     AX = 2527h
  2632.     EBX = new status (00h disabled, 01h enabled)
  2633. Return: CF clear
  2634.     EBX = previous state save flag
  2635. SeeAlso: AX=2528h
  2636. --------E-212528-----------------------------
  2637. INT 21 P - Phar Lap 386/DOS-Extender VMM - READ REGISTERS AFTER CTRL-C INT
  2638.     AX = 2528h
  2639.     DS:EBX -> buffer for registers (see #0593)
  2640. Return: CF clear if successful
  2641.         DS:EBX buffer filled
  2642.     CF set on error
  2643.         EAX = error code
  2644.         83h interrupt state save not enabled
  2645.         84h no active interrupt
  2646. SeeAlso: AX=2527h
  2647.  
  2648. Format of Phar Lap buffer for registers:
  2649. Offset    Size    Description    (Table 0593)
  2650.  00h  8 BYTEs    unused
  2651.  08h  4    DWORDs    EAX,EBX,ECX,EDX
  2652.  18h  4 DWORDs    ESI,EDI,EBP,ESP
  2653.  28h  6 WORDs    CS,DS,SS,ES,FS,GS
  2654.  34h    DWORD    EIP
  2655.  38h    DWORD    EFLAGS
  2656. --------E-212529-----------------------------
  2657. INT 21 P - Phar Lap 386/DOS-Extender - LOAD FLAT MODEL .EXP or .REX FILE
  2658.     AX = 2529h
  2659.     ???
  2660. Return: ES:EBX -> parameter block (see #0594)
  2661.     ???
  2662. Note:    details not available at this time
  2663. SeeAlso: AX=252Ah
  2664.  
  2665. Format of Phar Lap program load parameter block:
  2666. Offset    Size    Description    (Table 0594)
  2667.  00h    DWORD    initial EIP
  2668.  04h    WORD    initial CS
  2669.  06h    DWORD    initial ESP
  2670.  0Ah    WORD    initial SS
  2671.  0Ch  4 WORDs    initial DS, ES, FS, GS
  2672.  14h    DWORD    minimum size in bytes of program segment
  2673.  18h    DWORD    bytes of additional memory allocated
  2674.  1Ch    DWORD    flags
  2675.         bit 0: child linked with -UNPRIVILEGED
  2676.         ---v6.0+ ---
  2677.         bit 1: child is PE file instead of .EXP
  2678.         bit 2: loaded file is a DLL
  2679.         bits 3-31 reserved
  2680. ---v6.0+ ---
  2681.  20h    DWORD    module handles (PE files only)
  2682.  24h  7 DWORDs    reserved (0)
  2683. --------E-21252A-----------------------------
  2684. INT 21 P - Phar Lap 386/DOS-Extender VMM - NEW LOAD PROGRAM FOR DEBUG
  2685.     AX = 252Ah
  2686.     DS:EDX -> ASCIZ program name
  2687.     ES:EBX -> parameter block (see #0588)
  2688.     ECX = size of LDT buffer in bytes
  2689.     ESI = bit flags
  2690.         bit 0: allow demand paging rather than loading entire program
  2691.         bit 1: demand page from swap file rather than from .EXP
  2692. Return: CF clear if successful
  2693.         EAX = VMM handle or FFFFFFFFh if none
  2694.         ECX = number of descriptors in LDT buffer
  2695.     CF set on error
  2696.         EAX = error code
  2697.         02h file error
  2698.             EBX = file error code (see #0595)
  2699.             ECX = DOS error code if EBX=1,2,3, or 8
  2700.         08h insufficient memory
  2701.             EBX = memory error code (see #0596)
  2702.         80h LDT buffer too small
  2703.         87h called twice without intervening call to AX=2531h
  2704. SeeAlso: AX=2512h,AX=2517h,AX=2529h,AX=2531h
  2705.  
  2706. (Table 0595)
  2707. Values for Phar Lap file error code:
  2708.  01h    DOS open error
  2709.  02h    DOS seek error
  2710.  03h    DOS read error
  2711.  04h    not an .EXP or .REX file
  2712.  05h    invalid file format
  2713.  06h    -OFFSET is not a multiple of 64K
  2714.  07h    -NOPAGE incompatible with -REALBREAK/-OFFSET
  2715.  08h    DOS error loading .EXE file
  2716.  
  2717. (Table 0596)
  2718. Values for Phar Lap memory error code:
  2719.  01h    out of physical memory
  2720.  02h    out of swap space
  2721.  04h    unable to change extended memory allocation
  2722.  05h    -MAXPGMMEM exceeded
  2723.  06h    insufficient low memory to REALBREAK value
  2724.  07h    insufficient low memory for PSP and environment
  2725. --------E-21252BBH00-------------------------
  2726. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE UNMAPPED PAGES
  2727.     AX = 252Bh
  2728.     BH = 00h
  2729.     ???
  2730. Return: ???
  2731. --------E-21252BBH01-------------------------
  2732. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE ALLOCATED PAGES
  2733.     AX = 252Bh
  2734.     BH = 01h
  2735.     ???
  2736. Return: ???
  2737. --------E-21252BBH02-------------------------
  2738. INT 21 Pu - Phar Lap 386/DOS-Extender - CREATE PHYSICAL DEVICE PAGES
  2739.     AX = 252Bh
  2740.     BH = 02h
  2741.     ???
  2742. Return: ???
  2743. --------E-21252BBH03-------------------------
  2744. INT 21 Pu - Phar Lap 386/DOS-Extender - MAP DATA FILE
  2745.     AX = 252Bh
  2746.     BH = 03h
  2747.     ???
  2748. Return: ???
  2749. SeeAlso: AX=252Bh/BL=0Bh
  2750. --------E-21252BBH04-------------------------
  2751. INT 21 Pu - Phar Lap 386/DOS-Extender - GET PAGE TYPES
  2752.     AX = 252Bh
  2753.     BH = 04h
  2754.     ???
  2755. Return: ???
  2756. Note:    returns one word per page
  2757. SeeAlso: #0597
  2758.  
  2759. Bitfields for Phar Lap page information:
  2760. Bit(s)    Description    (Table 0597)
  2761.  7    mapped to read/write data file
  2762.  6    mapped to read-only data file
  2763.  5    swapped to disk
  2764.  4    locked
  2765.  3-0    page type
  2766.     0 unmapped
  2767.     1 allocated
  2768.     2 physical device page
  2769. --------E-21252B-----------------------------
  2770. INT 21 P - Phar Lap 386/DOS-Extender - VIRTUAL MEMORY MANAGEMENT - PAGE LOCKING
  2771.     AX = 252Bh
  2772.     BH = function
  2773.         05h lock pages
  2774.         06h unlock pages
  2775.     BL = address type
  2776.         00h linear address
  2777.         ECX = linear start address of memory region
  2778.         01h segmented address
  2779.         ES:ECX -> start of memory region
  2780.     EDX = size of memory region in bytes
  2781. Return: CF clear if successful
  2782.     CF set on error
  2783. Note:    this function is also supported by FlashTek X-32VM; if X-32 is not
  2784.       using virtual memory, this function always succeeds
  2785. --------E-21252B-----------------------------
  2786. INT 21 Pu - Phar Lap 386/DOS-Extender - FREE PHYSICAL PAGES
  2787.     AX = 252Bh
  2788.     BH = function (07h,08h)
  2789.     ???
  2790. Return: ???
  2791. --------E-21252BBH09-------------------------
  2792. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - GET PAGETABLE ENTRY/PAGE TABLE INFO
  2793.     AX = 252Bh
  2794.     BH = 09h
  2795.     BL = subfunction
  2796.         00h get page table entry by linear address
  2797.         ECX = linear address for which to get page table entry
  2798.         01h get page table entry by logical address
  2799.         ES:ECX = address for which to get page table entry
  2800. Return: CF clear if successful
  2801.         EAX = page table entry
  2802.         EBX = additional page table information
  2803.     CF set on error
  2804.         EAX = error code
  2805.         0009h invalid address
  2806.         0082h running under DPMI
  2807. SeeAlso: AX=251Dh,AX=252Bh/BH=0Ah
  2808. --------E-21252BBH0A-------------------------
  2809. INT 21 P - Phar Lap 386/DOS-Extender v4.1 - SET PAGETABLE ENTRY/PAGE TABLE INFO
  2810.     AX = 252Bh
  2811.     BH = 0Ah
  2812.     BL = subfunction
  2813.         00h set page table entry for linear address
  2814.         ECX = linear address for which to get page table entry
  2815.         01h set page table entry for logical address
  2816.         ES:ECX = address for which to get page table entry
  2817.     ESI = page table entry
  2818.     EDI = additional page table information
  2819. Return: CF clear if successful
  2820.     CF set on error
  2821.         EAX = error code
  2822.         0009h invalid address
  2823.         0082h running under DPMI
  2824. SeeAlso: AX=252Bh/BH=09h
  2825. --------E-21252BBH0B-------------------------
  2826. INT 21 P - Phar Lap 386/DOS-Extender v4.1+ - MAP DATA FILE AT FILE OFFSET
  2827.     AX = 252Bh
  2828.     BH = 0Bh
  2829.     BL = subfunction
  2830.         00h by linear address
  2831.         ECX = linear address at which to map data file
  2832.         01h by logical address
  2833.         ES:ECX = logical address at which to map data file
  2834.     EDX = number of bytes to map
  2835.     DS:ESI -> mapping structure (see #0598)
  2836.     DS:EDI -> ASCIZ filename
  2837. Return: CF clear if successful
  2838.     CF set on error
  2839.         EAX = error code
  2840.         0002h file error
  2841.             ECX = phase (01h opening file, 02h seeking, 03h reading)
  2842.             EDX = error code returned by DOS
  2843.         0009h invalid address
  2844.         0081h invalid parameters or 386|VMM not present
  2845.         0086h all 386|VMM file handles already in use
  2846. SeeAlso: AX=252Bh/BH=03h,AX=252Bh/BH=09h
  2847.  
  2848. Format of Phar Lap mapping structure:
  2849. Offset    Size    Description    (Table 0598)
  2850.  00h    DWORD    starting file offset to be mapped
  2851.  04h    DWORD    DOS file access and sharing modes (see #0628 at INT 21/AH=3Dh)
  2852. --------E-21252C-----------------------------
  2853. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ADD UNMAPPED PAGES AT END OF SEGMENT
  2854.     AX = 252Ch
  2855.     BX = segment selector
  2856.     ECX = number of 4K pages to add
  2857. Return: CF clear if successful
  2858.         EAX = offset in segment of beginning of unmapped pages
  2859.     CF set on error
  2860.         EAX = error code
  2861.         08h insufficent memory
  2862.         09h invalid selector
  2863.         82h not supported by current DPMI
  2864. --------E-21252D-----------------------------
  2865. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - CLOSE VMM FILE HANDLE
  2866.     AX = 252Dh
  2867.     EBX = VMM file handle
  2868. Return: CF clear if successful
  2869.     CF set on error
  2870.         EAX = error code (81h invalid VMM handle)
  2871. --------E-21252E-----------------------------
  2872. INT 21 P - Phar Lap 386/DOS-Extender VMM v2.3+ - GET/SET VMM PARAMETERS
  2873.     AX = 252Eh
  2874.     CL = direction (00h get parameters, 01h set parameters)
  2875.     DS:EBX -> parameter buffer (see #0599)
  2876. Return: CF clear if successful
  2877.     CF set on error
  2878.         EAX = error code (81h bad parameter value)
  2879.  
  2880. Format of Phar Lap VMM parameter buffer:
  2881. Offset    Size    Description    (Table 0599)
  2882.  00h    DWORD    flags
  2883.         bit 0: page fault logging enabled
  2884.         ---v5.0+ ---
  2885.         bit 1: swap extender to disk during DOS EXEC call
  2886.         bit 2: don't zero allocated memory
  2887.  04h    DWORD    scan period for page aging, in milliseconds
  2888.  08h    DWORD    maximum size (in bytes) to check on each page scan
  2889.  0Ch 52 BYTEs    unused
  2890. --------E-21252F-----------------------------
  2891. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - WRITE RECORD TO VMM PAGE LOG FILE
  2892.     AX = 252Fh
  2893.     DS:EBX -> data to be written
  2894.     CX = size of data in bytes
  2895. Return: CF clear if successful
  2896.     CF set on error
  2897.         EAX = error code (85h no page log file or not 386/VMM)
  2898. --------E-212530-----------------------------
  2899. INT 21 P - Phar Lap 386/DOS-Ext VMM v2.3+ - SET SIZE OF BUFFER FOR DOS CALLS
  2900.     AX = 2530h
  2901.     ECX = size of data buffer in bytes (1024 to 65536)
  2902. Return: CF clear if successful
  2903.     CF set on error
  2904.         EAX = error code
  2905.         08h insufficient low memory
  2906.         81h invalid size
  2907. SeeAlso: AX=2517h
  2908. --------E-212531-----------------------------
  2909. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0 - READ/WRITE LDT DESCRIPTOR
  2910.     AX = 2531h
  2911.     BX = segment selector
  2912.     ECX = direction (00h read, 01h write)
  2913.     DS:EDX -> 8-byte buffer for descriptor contents
  2914. Return: CF clear if successful
  2915.     CF set on error
  2916.         EAX = error code
  2917.         81h invalid selector
  2918.         82h DPMI running, or not a code or data segment
  2919. --------E-212532-----------------------------
  2920. INT 21 P - Phar Lap 386/DOS-Extender - GET EXCEPTION HANDLER VECTOR
  2921.     AX = 2532h
  2922.     CL = exception number (00h-0Fh)
  2923. Return: CF clear if successful
  2924.         ES:EBX = CS:EIP of current exception handler
  2925.     CF set on error (CL > 0Fh)
  2926. Notes:    this call is also supported by the FlashTek X-32VM extender
  2927.     this function is incompatible with 386|VMM; use AX=2522h instead
  2928. SeeAlso: AX=2522h,AX=2533h
  2929. --------E-212533-----------------------------
  2930. INT 21 P - Phar Lap 386/DOS-Extender - SET EXCEPTION HANDLER VECTOR
  2931.     AX = 2533h
  2932.     CL = exception number (00h-0Fh)
  2933.     DS:EDX = CS:EIP of new exception handler
  2934. Return: CF clear if successful
  2935.     CF set on error (CL > 0Fh)
  2936. Notes:    this call is also supported by the FlashTek X-32VM extender
  2937.     this function is incompatible with 386|VMM; use AX=2522h instead
  2938. SeeAlso: AX=2522h,AX=2532h
  2939. --------E-212534-----------------------------
  2940. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - GET INTERRUPT FLAG
  2941.     AX = 2534h
  2942. Return: CF clear
  2943.     EAX = interrupt state (00h disabled, 01h enabled)
  2944. --------E-212535-----------------------------
  2945. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - READ/WRITE SYSTEM REGISTERS
  2946.     AX = 2535h
  2947.     EBX = direction (00h read registers, 01h write)
  2948.     DS:EDX -> system register record (see #0600)
  2949. Return: CF clear
  2950. Note:    this call is only available under MS Windows if PHARLAP.386 VDD is
  2951.       installed
  2952.  
  2953. Format of Phar Lap system register record:
  2954. Offset    Size    Description    (Table 0600)
  2955.  00h    DWORD    CR0
  2956.  04h  4 DWORDs    DR0,DR1,DR2,DR3
  2957.  14h  2 DWORDs    reserved
  2958.  1Ch  2 DWORDs    DR6,DR7
  2959.  24h  3 DWORDs    reserved
  2960. --------E-212536----------------------------
  2961. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0+ - MIN/MAX EXTENDED/CONV MEMORY USAGE
  2962.     AX = 2536h
  2963.     EBX = bit flags
  2964.         bit 0: modifying conventional memory rather than extended memory
  2965.         bit 1: setting maximum memory usage rather than minimum
  2966.     ECX = new limit in 4K pages
  2967. Return: CF clear if successful
  2968.         EAX = new limit
  2969.     CF set on error
  2970.         EAX = error code (08h memory error or -NOPAGE set)
  2971.         EBX = maximum limit in pages
  2972.         ECX = minimum limit in pages
  2973. --------E-212537----------------------------
  2974. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - ALLOCATE DOS MEMORY ABOVE DOS BUFFER
  2975.     AX = 2537h
  2976.     BX = number of paragraphs to allocate
  2977. Return: CF clear if successful
  2978.         AX = real-mode segment of allocated block
  2979.     CF set on error
  2980.         AX = error code
  2981.         07h MS-DOS memory chain corrupted
  2982.         08h insufficient low memory
  2983.         BX = size in paragraphs of largest free block
  2984. SeeAlso: AH=48h
  2985. --------E-212538----------------------------
  2986. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - READ PROTMODE REGS AFTER SFTWARE INT
  2987.     AX = 2538h
  2988.     DS:EBX -> buffer for registers (see #0593)
  2989.     ECX = register record to retrieve
  2990.         00h first interrupt state
  2991.         01h next interrupt state
  2992.         EDX = handle for current interrupt state
  2993. Return: CF clear if successful
  2994.         DS:EBX buffer filled
  2995.         EDX = handle of current interrupt state
  2996.         ESI = number of interrupt which occurred
  2997.     CF set on error
  2998.         EAX = error code
  2999.         81h invalid handle in EDX
  3000.         83h register saving not enabled
  3001.         84h no more interrupt states
  3002. SeeAlso: AX=2527h,AX=2528h
  3003. --------E-212539----------------------------
  3004. INT 21 P - Phar Lap 386/DOS-Ext VMM v3.0 - GET OFFSET OF .EXP FILE HEADER
  3005.     AX = 2539h
  3006.     BX = MS-DOS file handle for open file
  3007. Return: CF clear if successful
  3008.         EAX = offset of .EXP header in file
  3009.     CF set on error
  3010.         EAX = error code (02h file error)
  3011.         EBX = file error code
  3012.         02h DOS error seeking
  3013.         03h DOS error reading
  3014.         04h invalid file type    
  3015.         05h invalid file format
  3016.         ECX = DOS error code if EBX=02h or 03h
  3017.     current file position in file modified
  3018. --------E-21253A----------------------------
  3019. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - INSTALL MOD. SEG FAILURE HANDLER
  3020.     AX = 253Ah
  3021.     ES:EBX -> function to be called when INT 21/AH=4Ah is about to return
  3022.         an error
  3023. Return: CF clear
  3024.     ES:EBX -> previous handler
  3025. SeeAlso: AH=4Ah
  3026. --------E-21253B----------------------------
  3027. INT 21 P - Phar Lap 386/DOS-Extender v3.0+ - JUMP TO REAL MODE CODE, NO CONTEXT
  3028.     AX = 253Bh
  3029.     DS:EBX -> buffer containing register contents (see #0593)
  3030. Return: never returns
  3031. SeeAlso: AX=2528h
  3032. --------E-21253C-----------------------------
  3033. INT 21 P - Phar Lap 386/DOS-Extender VMM v3.0+ - SHRINK 386|VMM SWAP FILE
  3034.     AX = 253Ch
  3035. Return: CF clear
  3036.     EAX = old size of swap file in bytes
  3037.     EBX = new size of swap file in bytes
  3038. --------E-21253D-----------------------------
  3039. INT 21 P - Phar Lap 386/DOS-Extender v4.0+ - READ/WRITE IDT DESCRIPTOR
  3040.     AX = 253Dh
  3041.     BL = interrupt number
  3042.     ECX = direction (0 = read, 1 = write)
  3043.     DS:EDX -> 8-byte buffer for descriptor
  3044. Return: CF clear if successful
  3045.         DS:EDX filled if reading
  3046.     CF set on error
  3047.         EAX = error code (0082h if running under DPMI)
  3048. Desc:    access hardware-level IDT rather than the internal 386/DOS-Extender
  3049.       shadow IDT
  3050. Notes:    this call will always fail under DPMI because it is not possible to
  3051.       access the IDT
  3052.     the descriptor is not checked when writing
  3053.     this call can normally be used only by programs running in ring 0
  3054.       because the processor does not allow an interrupt to be vectored to
  3055.       a less privileged ring
  3056. --------E-21253F-----------------------------
  3057. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - ALLOCATE LDT DESCRIPTOR
  3058.     AX = 253Fh
  3059.     BX = LDT descriptor to allocate (0000h for any)
  3060.     ???
  3061. Return: ???
  3062. --------E-212540-----------------------------
  3063. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FORCE ALIAS OF SEGMENT
  3064.     AX = 2540h
  3065.     ???
  3066. Return: ???
  3067. --------E-212544-----------------------------
  3068. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - FREE DLL
  3069.     AX = 2544h
  3070.     ???
  3071. Return: ???
  3072. --------E-212545-----------------------------
  3073. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET/SET PROCEDURE ADDRESS
  3074.     AX = 2545h
  3075.     ECX = direction (00h get, 01h set)
  3076.     ???
  3077. Return: ???
  3078. --------E-212546-----------------------------
  3079. INT 21 Pu - Phar Lap 386/DOS-Extender v6.0+ - GET MODULE HANDLE
  3080.     AX = 2546h
  3081.     ???
  3082. Return: ???
  3083. --------E-2125C0-----------------------------
  3084. INT 21 P - Phar Lap 386/DOS-Extender - ALLOCATE MS-DOS MEMORY BLOCK
  3085.     AX = 25C0h
  3086.     BX = number of 16-byte paragraphs of MS-DOS memory requested
  3087. Return: CF clear if successful
  3088.         AX = real-mode paragraph address of memory
  3089.     CF set on error
  3090.         AX = error code
  3091.         07h MS-DOS memory control blocks destroyed
  3092.         08h insufficient memory
  3093.         BX = size in paragraphs of largest available memory block
  3094. SeeAlso: AX=25C1h,AX=25C2h
  3095. --------E-2125C1-----------------------------
  3096. INT 21 P - Phar Lap 386/DOS-Extender - RELEASE MS-DOS MEMORY BLOCK
  3097.     AX = 25C1h
  3098.     CX = real-mode paragraph address of memory block to free
  3099. Return: CF clear if successful
  3100.         EAX destroyed
  3101.     CF set on error
  3102.         AX = error code
  3103.         07h MS-DOS memory control blocks destroyed
  3104.         09h invalid memory block address in CX
  3105. SeeAlso: AX=25C0h,AX=25C2h
  3106. --------E-2125C2-----------------------------
  3107. INT 21 P - Phar Lap 386/DOS-Extender - MODIFY MS-DOS MEMORY BLOCK
  3108.     AX = 25C2h
  3109.     BX = new requested block size in paragraphs
  3110.     CX = real-mode paragraph address of memory block to modify
  3111. Return: CF clear if successful
  3112.         EAX destroyed
  3113.     CF set on error
  3114.         AX = error code
  3115.         07h MS-DOS memory control blocks destroyed
  3116.         08h insufficient memory
  3117.         09h invalid memory block address in CX
  3118.         BX = size in paragraphs of largest available memory block
  3119. SeeAlso: AX=25C0h,AX=25C1h
  3120. --------E-2125C3-----------------------------
  3121. INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
  3122.     AX = 25C3h
  3123.     ES:EBX -> pointer to parameter block (see #0602)
  3124.     DS:EDX -> pointer to ASCIZ program filename
  3125. Return: CF clear if successful
  3126.         all registers unchanged
  3127.     CF set on error
  3128.         EAX = error code (see #0601)
  3129.  
  3130. (Table 0601)
  3131. Values for Phar Lap error code:
  3132.  01h    function code in AL is invalid ???
  3133.  02h    file not found or path invalid
  3134.  05h    access denied
  3135.  08h    insufficient memory to load program
  3136.  0Ah    environment invalid
  3137.  0Bh    invalid file format
  3138.  
  3139. Format of parameter block:
  3140. Offset    Size    Description    (Table 0602)
  3141.  00h    DWORD    32-bit offset of environment string
  3142.  04h    WORD    segment selector of environment string
  3143.  06h    DWORD    32-bit offset of command-tail string
  3144.  0Ah    WORD    segment selector of command-tail string
  3145. --------D-2126-------------------------------
  3146. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  3147.     AH = 26h
  3148.     DX = segment at which to create PSP (see #0603)
  3149. Notes:    new PSP is updated with memory size information; INTs 22h, 23h, 24h
  3150.       taken from interrupt vector table; the parent PSP field is set to 0
  3151.     (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  3152.       copy
  3153. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  3154.  
  3155. Format of Program Segment Prefix (PSP):
  3156. Offset    Size    Description    (Table 0603)
  3157.  00h  2 BYTEs    INT 20 instruction for CP/M CALL 0 program termination
  3158.         the CDh 20h here is often used as a signature for a valid PSP
  3159.  02h    WORD    segment of first byte beyond memory allocated to program
  3160.  04h    BYTE    (DOS) unused filler
  3161.         (OS/2) count of fake DOS version returns
  3162.  05h    BYTE    CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
  3163.         BUG: (DOS 2+ DEBUG) PSPs created by DEBUG point at 000BEh
  3164.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  3165.  08h  2 BYTEs    remainder of FAR JMP at 05h
  3166.  0Ah    DWORD    stored INT 22 termination address
  3167.  0Eh    DWORD    stored INT 23 control-Break handler address
  3168.  12h    DWORD    DOS 1.1+ stored INT 24 critical error handler address
  3169.  16h    WORD    segment of parent PSP
  3170.  18h 20 BYTEs    DOS 2+ Job File Table, one byte per file handle, FFh = closed
  3171.  2Ch    WORD    DOS 2+ segment of environment for process (see #0604)
  3172.  2Eh    DWORD    DOS 2+ process's SS:SP on entry to last INT 21 call
  3173.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  3174.  34h    DWORD    DOS 3+ pointer to JFT (default PSP:0018h)
  3175.  38h    DWORD    DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  3176.         used by SHARE in DOS 3.3
  3177.  3Ch    BYTE    DOS 4+ (DBCS) interim console flag (see AX=6301h)
  3178.  3Dh    BYTE    (APPEND) TrueName flag (see INT 2F/AX=B711h)
  3179.  3Eh    BYTE    (Novell NetWare) flag: next byte initialized if CEh
  3180.         (OS/2) capabilities flag
  3181.  3Fh    BYTE    (Novell NetWare) Novell task number if previous byte is CEh
  3182.  40h  2 BYTEs    DOS 5+ version to return on INT 21/AH=30h
  3183.  42h    WORD    (MSWindows3) selector of next PSP (PDB) in linked list
  3184.         Windows keeps a linked list of Windows programs only
  3185.  44h    WORD    (MSWindows3) "PDB_Partition"
  3186.  46h    WORD    (MSWindows3) "PDB_NextPDB"
  3187.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  3188.  49h    BYTE    unused by DOS versions <= 6.00
  3189.  4Ch    WORD    (MSWindows3) "PDB_EntryStack"
  3190.  4Eh  2 BYTEs    unused by DOS versions <= 6.00
  3191.  50h  3 BYTEs    DOS 2+ service request (INT 21/RETF instructions)
  3192.  53h  2 BYTEs    unused in DOS versions <= 6.00
  3193.  55h  7 BYTEs    unused in DOS versions <= 6.00; can be used to make first FCB
  3194.           into an extended FCB
  3195.  5Ch 16 BYTEs    first default FCB, filled in from first commandline argument
  3196.         overwrites second FCB if opened
  3197.  6Ch 16 BYTEs    second default FCB, filled in from second commandline argument
  3198.           overwrites beginning of commandline if opened
  3199.  7Ch  4 BYTEs    unused
  3200.  80h 128 BYTEs    commandline / default DTA
  3201.         command tail is BYTE for length of tail, N BYTEs for the tail,
  3202.           followed by a BYTE containing 0Dh
  3203. Notes:    in DOS v3+, the limit on simultaneously open files may be increased by
  3204.       allocating memory for a new open file table, filling it with FFh,
  3205.       copying the first 20 bytes from the default table, and adjusting the
  3206.       pointer and count at 34h and 32h.  However, DOS will only copy the
  3207.       first 20 file handles into a child PSP (including the one created on
  3208.       EXEC).
  3209.     network redirectors based on the original MS-Net implementation use
  3210.       values of 80h-FEh in the open file table to indicate remote files;
  3211.       Novell NetWare also uses values from FEh down to 80h or one more than
  3212.       FILES= (whichever is greater) to indicate remote files
  3213.     MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  3214.       high; the first FCB is empty and the second contains the first
  3215.       parameter
  3216.     some DOS extenders place protected-mode values in various PSP fields
  3217.       such as the "parent" field, which can confuse PSP walkers.  Always
  3218.       check either for the CDh 20h signature or that the suspected PSP is
  3219.       at the beginning of a memory block which owns itself (the preceding
  3220.       paragraph should be a valid MCB with "owner" the same as the
  3221.       suspected PSP).
  3222.     Novell NetWare updates the fields at offsets 3Eh and 3Fh without
  3223.       checking that a legal PSP segment is current; see AH=50h for further
  3224.       discussion
  3225.  
  3226. Format of environment block:
  3227. Offset    Size    Description    (Table 0604)
  3228.  00h  N BYTEs    first environment variable, ASCIZ string of form "var=value"
  3229.       N BYTEs    second environment variable, ASCIZ string
  3230.     ...
  3231.       N BYTEs    last environment variable, ASCIZ string of form "var=value"
  3232.     BYTE    00h
  3233. ---DOS 3+---
  3234.     WORD    number of strings following environment (normally 1)
  3235.       N BYTEs    ASCIZ full pathname of program owning this environment
  3236.         other strings may follow
  3237. --------D-2127-------------------------------
  3238. INT 21 - DOS 1+ - RANDOM BLOCK READ FROM FCB FILE
  3239.     AH = 27h
  3240.     CX = number of records to read
  3241.     DS:DX -> opened FCB (see #0574)
  3242. Return: AL = status
  3243.         00h successful, all records read
  3244.         01h end of file, no data read
  3245.         02h segment wrap in DTA, no data read
  3246.         03h end of file, partial read
  3247.     [DTA] = records read from file
  3248.     CX = number of records read (return AL = 00h or 03h)
  3249. Notes:    read begins at current file position as specified in FCB; the file
  3250.       position is updated after reading
  3251.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3252. SeeAlso: AH=21h,AH=28h,AH=3Fh
  3253. --------D-2128-------------------------------
  3254. INT 21 - DOS 1+ - RANDOM BLOCK WRITE TO FCB FILE
  3255.     AH = 28h
  3256.     CX = number of records to write
  3257.     DS:DX -> opened FCB (see #0574)
  3258.     [DTA] = records to write
  3259. Return: AL = status
  3260.         00h successful
  3261.         01h disk full or file read-only
  3262.         02h segment wrap in DTA
  3263.     CX = number of records written
  3264. Notes:    write begins at current file position as specified in FCB; the file
  3265.       position is updated after writing
  3266.     if CX = 0000h on entry, no data is written; instead the file size is
  3267.       adjusted to be the same as the file position specified by the random
  3268.       record and record size fields of the FCB
  3269.     if the data to be written is less than a disk sector, it is copied into
  3270.       a DOS disk buffer, to be written out to disk at a later time
  3271.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
  3272. SeeAlso: AH=22h,AH=27h,AH=40h,AH=59h
  3273. --------D-2129-------------------------------
  3274. INT 21 - DOS 1+ - PARSE FILENAME INTO FCB
  3275.     AH = 29h
  3276.     AL = parsing options (see #0605)
  3277.     DS:SI -> filename string (both '*' and '?' wildcards OK)
  3278.     ES:DI -> buffer for unopened FCB
  3279. Return: AL = result code
  3280.         00h successful parse, no wildcards encountered
  3281.         01h successful parse, wildcards present
  3282.         FFh failed (invalid drive specifier)
  3283.     DS:SI -> first unparsed character
  3284.     ES:DI buffer filled with unopened FCB (see #0574)
  3285. Notes:    asterisks expanded to question marks in the FCB
  3286.     all processing stops when a filename terminator is encountered
  3287.     cannot be used with filespecs which include a path (DOS 2+)
  3288.     Novell NetWare monitors the result code since an 'invalid drive' may
  3289.       signal an attempt to reconnect a network drive; if there are no
  3290.       connections to the specified drive, NetWare attempts to build a
  3291.       connection and map the drive to the SYS:LOGIN directory
  3292. SeeAlso: AH=0Fh,AH=16h,AH=26h
  3293.  
  3294. Bitfields for parsing options:
  3295. Bit(s)    Description    (Table 0605)
  3296.  0    skip leading separators
  3297.  1    use existing drive number in FCB if no drive is specified, instead of
  3298.       setting field to zero
  3299.  2    use existing filename in FCB if no base name is specified, instead of
  3300.       filling field with blanks
  3301.  3    use existing extension in FCB if no extension is specified, instead of
  3302.       filling field with blanks
  3303.  4-7    reserved (0)
  3304. --------D-212A-------------------------------
  3305. INT 21 - DOS 1+ - GET SYSTEM DATE
  3306.     AH = 2Ah
  3307. Return: CX = year (1980-2099)
  3308.     DH = month
  3309.     DL = day
  3310. ---DOS 1.10+---
  3311.     AL = day of week (00h=Sunday)
  3312. SeeAlso: AH=2Bh"DOS",AH=2Ch,AH=E7h,INT 1A/AH=04h,INT 2F/AX=120Dh
  3313. --------D-212B-------------------------------
  3314. INT 21 - DOS 1+ - SET SYSTEM DATE
  3315.     AH = 2Bh
  3316.     CX = year (1980-2099)
  3317.     DH = month
  3318.     DL = day
  3319. Return: AL = status
  3320.         00h successful
  3321.         FFh invalid date, system date unchanged
  3322. Note:    DOS 3.3+ also sets CMOS clock
  3323. SeeAlso: AH=2Ah,AH=2Dh,INT 1A/AH=05h
  3324. --------E-212B--CX4149-----------------------
  3325. INT 21 - AI Architects - ??? - INSTALLATION CHECK
  3326.     AH = 2Bh
  3327.     CX = 4149h ('AI')
  3328.     DX = 413Fh ('A?')
  3329. Return: AL <> FFh if installed
  3330. Note:    Borland's TKERNEL makes this call
  3331. --------c-212B--CX4358-----------------------
  3332. INT 21 - Super PC-Kwik v3.20+ - INSTALLATION CHECK
  3333.     AH = 2Bh
  3334.     CX = 4358h ('CX')
  3335. Return: AL = FFh if PC-Kwik/PC-Cache not installed
  3336.     AL = 00h if installed
  3337.         CF clear
  3338.         CX = 6378h ('cx')
  3339.         BX = ???
  3340.         DX = version (DH = major version, DL = binary minor version)
  3341. Note:    PC Tools PC-Cache v5.x and Qualitas Qcache v4.00 are OEM versions of
  3342.       Super PC-Kwik, and thus support this call (PC-Cache 5.1 corresponds
  3343.       to PC-Kwik v3.20)
  3344. SeeAlso: INT 13/AH=A0h,INT 13/AH=B0h,INT 16/AX=FFA5h/CX=1111h
  3345. Index:    PC-Cache;installation check|Qualitas Qcache;installation check
  3346. Index:    installation check;PC-Cache 5.x|installation check;Qualitas Qcache
  3347. --------Q-212B--CX4445-----------------------
  3348. INT 21 - DESQview - INSTALLATION CHECK
  3349.     AH = 2Bh
  3350.     CX = 4445h ('DE')
  3351.     DX = 5351h ('SQ')
  3352.     AL = subfunction (DV v2.00+)
  3353.         01h get version
  3354.         Return: BX = version (BH = major, BL = minor)
  3355.         Note: early copies of v2.00 return 0002h
  3356.         02h get shadow buffer info, and start shadowing
  3357.         Return: BH = rows in shadow buffer
  3358.             BL = columns in shadow buffer
  3359.             DX = segment of shadow buffer
  3360.         04h get shadow buffer info
  3361.         Return: BH = rows in shadow buffer
  3362.             BL = columns in shadow buffer
  3363.             DX = segment of shadow buffer
  3364.         05h stop shadowing
  3365. Return: AL = FFh if DESQview not installed
  3366. Notes:    in DESQview v1.x, there were no subfunctions; this call only identified
  3367.       whether or not DESQview was loaded.  DESQview v2.52 performs function
  3368.       01h for all subfunction requests 0Ch and higher and appears to ignore
  3369.       all lower-numbered functions not listed here.
  3370.     DESQview versions 2.50-2.52 are part of DESQview/X v1.0x; version 2.53
  3371.       is part of DESQview/X v1.10; and version 2.63 is part of DESQview/X
  3372.       v2.00.
  3373. BUG:    subfunction 05h does not appear to work correctly in DESQview 2.52
  3374. SeeAlso: INT 10/AH=FEh,INT 10/AH=FFh,INT 15/AX=1024h,INT 15/AX=DE30h
  3375. --------U-212B--CX454C-----------------------
  3376. INT 21 - ELRES v1.1 - INSTALLATION CHECK
  3377.     AH = 2Bh
  3378.     CX = 454Ch ('EL')
  3379.     DX = 5253h ('RS')
  3380. Return: ES:BX -> ELRES history structure (see #0606)
  3381.     DX = DABEh (signature, DAve BEnnett)
  3382. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  3383.       Bennett which stores recent errorlevel values, allows them to be
  3384.       retrieved for use in batch files, and can place them in an
  3385.       environment variable
  3386. SeeAlso: AH=4Bh"ELRES",AH=4Dh
  3387.  
  3388. Format of ELRES history structure:
  3389. Offset    Size    Description    (Table 0606)
  3390.  00h    WORD    number of return codes which can be stored by following buffer
  3391.  02h    WORD    current position in buffer (treated as a ring)
  3392.  04h  N BYTEs    ELRES buffer
  3393. --------m-212B01CX444D-----------------------
  3394. INT 21 - Quarterdeck DOS-UP.SYS v2.00 - INSTALLATION CHECK
  3395.     AX = 2B01h
  3396.     CX = 444Dh ('DM')
  3397.     DX = 4158h ('AX')
  3398. Return: AX = 0000h if installed
  3399.         BX = version??? (0002h)
  3400.         CX = 4845h ('HE')
  3401.         DX = 5245h ('RE')
  3402.         ES = DOS-UP driver segment
  3403. --------T-212B01CX5441-----------------------
  3404. INT 21 - TAME v2.10+ - INSTALLATION CHECK
  3405.     AX = 2B01h
  3406.     CX = 5441h ('TA')
  3407.     DX = 4D45h ('ME')
  3408. ---v2.60---
  3409.     BH = ???
  3410.         00h skip ???, else do
  3411. Return: AL = 02h if installed
  3412.     ES:DX -> data area in TAME-RES (see #0607,#0611,#0613)
  3413. Program: TAME is a shareware program by David G. Thomas which gives up CPU time
  3414.       to other partitions under a multitasker when the current partition's
  3415.       program incessantly polls the keyboard or system time
  3416.  
  3417. Format of TAME 2.10-2.20 data area:
  3418. Offset    Size    Description    (Table 0607)
  3419.  00h    BYTE    data structure minor version number (01h in TAME 2.20)
  3420.  01h    BYTE    data structure major version number (07h in TAME 2.20)
  3421.  02h    DWORD    number of task switches
  3422.  06h    DWORD    number of keyboard polls
  3423.  0Ah    DWORD    number of time polls
  3424.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  3425.  12h    DWORD    original INT 10h
  3426.  16h    DWORD    original INT 14h
  3427.  1Ah    DWORD    original INT 15h
  3428.  1Eh    DWORD    original INT 16h
  3429.  22h    DWORD    original INT 17h
  3430.  26h    DWORD    original INT 21h
  3431.  2Ah    DWORD    original INT 28h
  3432.  2Eh    WORD    offset of TAME INT 10h handler
  3433.  30h    WORD    offset of TAME INT 14h handler
  3434.  32h    WORD    offset of TAME INT 15h handler
  3435.  34h    WORD    offset of TAME INT 16h handler
  3436.  36h    WORD    offset of TAME INT 17h handler
  3437.  38h    WORD    offset of TAME INT 21h handler
  3438.  3Ah    WORD    offset of TAME INT 28h handler
  3439.  3Ch    WORD    X in /max:X,Y or /freq:X,Y
  3440.  3Eh    WORD    Y in /max:X,Y or /freq:X,Y
  3441.  40h    WORD    number of polls remaining before next task switch
  3442.  42h    WORD    /KEYIDLE value
  3443.  44h    BYTE    interrupts already grabbed by TAME (see #0608)
  3444.  45h    BYTE    flags for interrupts which may be acted on (same bits as above)
  3445.  46h    BYTE    TAME enabled (01h) or disabled (00h)
  3446.  47h    BYTE    /TIMEPOLL (01h) or /NOTIMEPOLL (00h)
  3447.  48h    BYTE    /NOTIMER (01h) or /TIMER (00h)
  3448.  49h    BYTE    window or task number for this task
  3449.  4Ah    BYTE    multitasker type (see #0609)
  3450.  4Bh    BYTE    type of task switching selected
  3451.         bit 0: DESQview???
  3452.         bit 1: DoubleDOS???
  3453.         bit 2: TopView???
  3454.         bit 3: KeySwitch
  3455.         bit 4: HLT instruction
  3456.  4Ch    BYTE    ???
  3457.  4Dh    BYTE    flags
  3458.         bit 1: /FREQ instead of /MAX
  3459.  4Eh    BYTE    /FG: value
  3460.  4Fh    BYTE    task switches left until next FGONLY DESQview API call
  3461.  50h    BYTE    ???
  3462.  
  3463. Bitfields for interrupts already grabbed by TAME:
  3464. Bit(s)    Description    (Table 0608)
  3465.  0    INT 10h
  3466.  1    INT 14h
  3467.  2    INT 15h
  3468.  3    INT 16h
  3469.  4    INT 17h
  3470.  5    INT 21h
  3471.  6    INT 28h
  3472.  
  3473. (Table 0609)
  3474. Values for multitasker type:
  3475.  01h    DESQview
  3476.  02h    DoubleDOS
  3477.  03h    TopView
  3478.  04h    OmniView
  3479.  05h    VM/386
  3480.  
  3481. Bitfields for type of task switching selected:
  3482. Bit(s)    Description    (Table 0610)
  3483.  0    DESQview
  3484.  1    DoubleDOS
  3485.  2    TopView
  3486.  3    OmniView
  3487.  4    KeySwitch
  3488.  5    HLT instruction
  3489.  
  3490. Format of TAME 2.30 data area:
  3491. Offset    Size    Description    (Table 0611)
  3492.  00h    BYTE    data structure minor version number (02h in TAME 2.30)
  3493.  01h    BYTE    data structure major version number (0Ah in TAME 2.30)
  3494.  02h    DWORD    number of task switches
  3495.  06h    DWORD    number of keyboard polls
  3496.  0Ah    DWORD    number of time polls
  3497.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  3498.  12h    DWORD    time of last /CLEAR or TAME-RES load
  3499.  16h    DWORD    time yielded
  3500.  1Ah    DWORD    time spent polling
  3501.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  3502.  22h    DWORD    original INT 10h
  3503.  26h    DWORD    original INT 14h
  3504.  2Ah    DWORD    original INT 15h
  3505.  2Eh    DWORD    original INT 16h
  3506.  32h    DWORD    original INT 17h
  3507.  36h    DWORD    original INT 21h
  3508.  3Ah    DWORD    original INT 28h
  3509.  3Eh    WORD    offset of TAME INT 10h handler
  3510.  40h    WORD    offset of TAME INT 14h handler
  3511.  42h    WORD    offset of TAME INT 15h handler
  3512.  44h    WORD    offset of TAME INT 16h handler
  3513.  46h    WORD    offset of TAME INT 17h handler
  3514.  48h    WORD    offset of TAME INT 21h handler
  3515.  4Ah    WORD    offset of TAME INT 28h handler
  3516.  4Ch    WORD    X in /max:X,Y or /freq:X,Y
  3517.  4Eh    WORD    Y in /max:X,Y or /freq:X,Y
  3518.  50h    WORD    number of polls remaining before next task switch
  3519.  52h    WORD    /KEYIDLE value
  3520.  54h    WORD    /FG: value
  3521.  56h    WORD    task switches left until next FGONLY DESQview API call
  3522.  58h    WORD    multitasker version
  3523.  5Ah    WORD    virtual screen segment
  3524.  5Ch    BYTE    interrupts already grabbed by TAME (see #0608)
  3525.  5Dh    BYTE    flags for interrupts which may be acted on (same bits as above)
  3526.  5Eh    BYTE    window or task number for this task
  3527.  5Fh    BYTE    multitasker type (see #0609)
  3528.  60h    BYTE    type of task switching selected (bit flags) (see #0610)
  3529.  61h    BYTE    watch_DOS
  3530.  62h    BYTE    action flags (see #0612)
  3531.  63h    BYTE    old status
  3532.  64h    WORD    signature DA34h
  3533.  
  3534. Bitfields for TAME action flags:
  3535. Bit(s)    Description    (Table 0612)
  3536.  0    TAME enabled
  3537.  1    /FREQ instead of /MAX (X and Y count fields are per tick)
  3538.  2    /TIMEPOLL
  3539.  3    /KEYPOLL
  3540.  4    inhibit timer
  3541.  5    enable status monitoring
  3542. SeeAlso: #0611,#0613
  3543.  
  3544. Format of TAME 2.60 data area:
  3545. Offset    Size    Description    (Table 0613)
  3546.  00h    BYTE    data structure minor version number (02h in TAME 2.60)
  3547.  01h    BYTE    data structure major version number (0Bh in TAME 2.60)
  3548.  02h    DWORD    number of task switches
  3549.  06h    DWORD    number of keyboard polls
  3550.  0Ah    DWORD    number of time polls
  3551.  0Eh    DWORD    number of times DESQview told program runs only in foreground
  3552.  12h    DWORD    time of last /CLEAR or TAME-RES load
  3553.  16h    DWORD    time yielded
  3554.  1Ah    DWORD    time spent polling
  3555.  1Eh    DWORD    time spent waiting on key input with INT 16/AH=01h,11h
  3556.  22h  4 BYTEs    ???
  3557.  26h    DWORD    original INT 10h
  3558.  2Ah    DWORD    original INT 14h
  3559.  2Eh    DWORD    original INT 15h
  3560.  32h    DWORD    original INT 16h
  3561.  36h    DWORD    original INT 17h
  3562.  3Ah    DWORD    original INT 21h
  3563.  3Eh    DWORD    original INT 28h
  3564.  42h    WORD    offset of TAME INT 10h handler
  3565.  44h    WORD    offset of TAME INT 14h handler
  3566.  46h    WORD    offset of TAME INT 15h handler
  3567.  48h    WORD    offset of TAME INT 16h handler
  3568.  4Ah    WORD    offset of TAME INT 17h handler
  3569.  4Ch    WORD    offset of TAME INT 21h handler
  3570.  4Eh    WORD    offset of TAME INT 28h handler
  3571.  50h    WORD    X in /max:X,Y or /freq:X,Y
  3572.  52h    WORD    Y in /max:X,Y or /freq:X,Y
  3573.  54h    WORD    number of polls remaining before next task switch
  3574.  56h    WORD    /KEYIDLE value
  3575.  58h  4 BYTEs    ???
  3576.  5Ch    WORD    X in /boost:X,Y
  3577.  5Eh    WORD    Y in /boost:X,Y
  3578.  60h    WORD    /FG: value
  3579.  62h    WORD    task switches remaining until next FGONLY DESQview API call
  3580.  64h    WORD    multitasker version ???
  3581.  66h    WORD    virtual screen segment
  3582.  68h    BYTE    interrupts already grabbed by TAME (see #0608)
  3583.  69h    BYTE    flags for interrupts which may be acted on (same bits as above)
  3584.  6Ah    BYTE    window or task number for this task
  3585.  6Bh    BYTE    multitasker type (see #0609)
  3586.  6Ch    BYTE    type of task switching selected (bit flags) (see #0610)
  3587.  6Dh    BYTE    watch_DOS
  3588.  6Eh    BYTE    action flags (see #0612)
  3589.  6Fh    BYTE    old status
  3590.  70h    WORD    signature DA34h
  3591. --------v-212B16CX0643-----------------------
  3592. INT 21 - VIRUS - "Maltese Amoeba" - INSTALLATION CHECK
  3593.     AX = 2B16h
  3594.     CX = 0643h
  3595. Return: AX = 1603h if installed
  3596. --------R-212B44BX4D41-----------------------
  3597. INT 21 - pcANYWHERE IV/LAN - INSTALLATION CHECK
  3598.     AX = 2B44h ('D')
  3599.     BX = 4D41h ('MA')
  3600.     CX = 7063h ('pc')
  3601.     DX = 4157h ('AW')
  3602. Return: AX = resident program
  3603.         4F4Bh ('OK') if large host resident
  3604.         6F6Bh ('ok') if small host resident
  3605.     CX:DX -> API entry point (see #0614)
  3606. SeeAlso: INT 16/AH=79h
  3607.  
  3608. (Table 0614)
  3609. Call pcANYWHERE API entry point with:
  3610.     AX = 0000h get pcANYWHERE IV version
  3611.         DS:SI -> BYTE buffer for host type code
  3612.         Return: AH = version number
  3613.             AL = revision number
  3614.             DS:DI buffer byte filled with
  3615.             00h full-featured host
  3616.             01h limited-feature LAN host
  3617.             other API may not be supported
  3618.     AX = 0001h initialize operation
  3619.         DS:SI -> initialization request structure (see #0615)
  3620.         Return: AX = function status (see #0618)
  3621.     AX = 0002h get status
  3622.         Return: AH = current operating mode (see init req structure below)
  3623.             AL = current connection status (see #0617)
  3624.     AX = 0003h suspend remote screen updates
  3625.         Return: AX = function status (see #0618)
  3626.     AX = 0004h resume screen updates
  3627.         Return: AX = function status (see #0618)
  3628.     AX = 0005h end current remote access session
  3629.         DS:SI -> termination request structure (see #0616)
  3630.         Return: AX = function status (see #0618)
  3631.     AX = 0006h remove pcANYWHERE IV from memory
  3632.         Return: AX = status (see #0618)
  3633.     AX = 8000h read data from communications channel
  3634.         DS:BX -> buffer
  3635.         CX = buffer size
  3636.         Return: AX >= number of characters read/available
  3637.             AX < 0 on error
  3638.     AX = 8001h write data to communications channel
  3639.         DS:BX -> buffer
  3640.         CX = buffer size
  3641.         Return: AX >= number of characters written
  3642.             AX < 0 on error
  3643.     AX = 8002h get connection status
  3644.         Return: AX = status
  3645.             > 0000h if connection active
  3646.             = 0000h if connection lost
  3647.             < 0000h on error
  3648.  
  3649. Format of pcANYWHERE initialization request structure:
  3650. Offset    Size    Description    (Table 0615)
  3651.  00h    BYTE    operating mode
  3652.         00h wait for a call
  3653.         01h hot key activates
  3654.         02h incoming call activates
  3655.         03h initiate a call
  3656.  01h  3 BYTEs    user ID to append to config file names
  3657.  04h    WORD    DS-relative pointer to path for config files
  3658.  06h    WORD    DS-relative pointer to path for program files
  3659.  
  3660. Format of pcANYWHERE termination request structure:
  3661. Offset    Size    Description    (Table 0616)
  3662.  00h    BYTE    operating mode after termination
  3663.         00h wait for a call
  3664.         01h hot key activates
  3665.         02h incoming call activates
  3666.         80h use current mode
  3667.         FFh remove from memory
  3668.  
  3669. Bitfields for current connection status:
  3670. Bit(s)    Description    (Table 0617)
  3671.  0    a physical connection is active
  3672.  1    remove screen updating is active
  3673.  2    connection checking is active
  3674.  3    hot key detection is active
  3675.  4    background file transfer is active
  3676.  
  3677. (Table 0618)
  3678. Values for pcANYWHERE function status:
  3679.  0000h    function completed successfully
  3680.  FFD1h    unable to release interrupt vectors
  3681.  FFD2h    unable to release allocated memory
  3682.  FFF2h    unable to establish a connection when operating mode is
  3683.       "Initiate a call"
  3684.  FFF3h    modem configuration is invalid (corrupt config)
  3685.  FFF4h    modem initialization failed (no modem response)
  3686.  FFF5h    the communications device could not be initialized
  3687.  FFF6h    the host operator aborted the function
  3688.  FFF7h    the communications driver type specified in the configuration file is
  3689.       different than the one loaded when pcANYWHERE IV was started
  3690.  FFF9h    the configuration file is invalid
  3691.  FFFAh    the configuration file could not be found
  3692.  FFFBh    no session is active
  3693.  FFFCh    a remote access session is active
  3694.  FFFDh    the specified operating mode is invalid
  3695. ----------212B--CX6269-----------------------
  3696. INT 21 - WDTSR.COM - INSTALLATION CHECK
  3697.     AH = 2Bh
  3698.     CX = 6269h ('bi')
  3699.     DX = 742Dh ('t-')
  3700. Return: AL = FFh if not installed
  3701.     AL = 77h ('w') if WDTSR is installed
  3702.         CX = 6174h ('at')
  3703.         DX = 6368h ('ch')
  3704.         ES = resident code segment
  3705.         ES:DI -> identification and configuration data
  3706. Program: WDTSR is a driver for the bitWatch watchdog hardware by bit-design
  3707.       GmbH
  3708. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 14/AH=14h"FOSSIL",INT 15/AH=C3h
  3709. --------S-212B--CX6269-----------------------
  3710. INT 21 - bitFOSS - INSTALLATION CHECK
  3711.     AH = 2Bh
  3712.     CX = 6269h ('bi')
  3713.     DX = 7446h ('tF')
  3714. Return: AL = FFh if not installed
  3715.     AL = 4Fh ('O') if bitFOSS is installed
  3716.         CX = 5353h ('SS')
  3717.         DX = 494Ch ('IL')
  3718.         ES = resident code segment
  3719.         ES:DI -> identification data
  3720. Program: bitFOSS is a revision 5 FOSSIL driver
  3721. SeeAlso: AH=2Bh/CX=6269h"bitFOSSI",INT 11/AH=BCh
  3722. --------S-212B--CX6269-----------------------
  3723. INT 21 - bitFOSSI - INSTALLATION CHECK
  3724.     AH = 2Bh
  3725.     CX = 6269h ('bi')
  3726.     DX = 7449h ('tI')
  3727. Return: AL = FFh if not installed
  3728.     AL = 53h ('S') if bitFOSSI is installed
  3729.         CX = 444Eh ('DN')
  3730.         DX = 2D46h ('-F')
  3731.         ES = resident code segment
  3732.         ES:DI -> identification data
  3733. Program: bitFOSSI is a revision 5 FOSSIL driver for ???'s ISDN board
  3734. SeeAlso: AH=2Bh/CX=6269h/DX=7446h,INT 11/AH=BCh
  3735. --------D-212C-------------------------------
  3736. INT 21 - DOS 1+ - GET SYSTEM TIME
  3737.     AH = 2Ch
  3738. Return: CH = hour
  3739.     CL = minute
  3740.     DH = second
  3741.     DL = 1/100 seconds
  3742. Note:    on most systems, the resolution of the system clock is about 5/100sec,
  3743.       so returned times generally do not increment by 1
  3744.     on some systems, DL may always return 00h
  3745. SeeAlso: AH=2Ah,AH=2Dh,AH=E7h,INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
  3746. SeeAlso: INT 2F/AX=120Dh
  3747. --------v-212C00CX534B-----------------------
  3748. INT 21 - SKUDO - INSTALLATION CHECK
  3749.     AX = 2C00h
  3750.     CX = 534Bh ('SK')
  3751.     DX = 5544h ('UD')
  3752.     BX = 4F21h ('O!')
  3753. Return: AX = 5349h ('SI') if installed
  3754.         CH = version number
  3755.         CL = subversion
  3756. Program: SKUDO is an antivirus TSR by Jordi Mas
  3757. --------D-212D-------------------------------
  3758. INT 21 - DOS 1+ - SET SYSTEM TIME
  3759.     AH = 2Dh
  3760.     CH = hour
  3761.     CL = minute
  3762.     DH = second
  3763.     DL = 1/100 seconds
  3764. Return: AL = result
  3765.         00h successful
  3766.         FFh invalid time, system time unchanged
  3767. Note:    DOS 3.3+ also sets CMOS clock
  3768. SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
  3769. --------T-212D01CX7820-----------------------
  3770. INT 21 - PC-Mix - INSTALLATION CHECK
  3771.     AX = 2D01h
  3772.     CX = 7820h ('X ')
  3773.     DX = 6D69h ('MI')
  3774. Return: AL = 00h if installed
  3775. --------D-212E--DL00-------------------------
  3776. INT 21 - DOS 1+ - SET VERIFY FLAG
  3777.     AH = 2Eh
  3778.     DL = 00h (DOS 1.x/2.x only)
  3779.     AL = new state of verify flag
  3780.         00h off
  3781.         01h on
  3782. Notes:    default state at system boot is OFF
  3783.     when ON, all disk writes are verified provided the device driver
  3784.       supports read-after-write verification
  3785. SeeAlso: AH=54h
  3786. --------D-212F-------------------------------
  3787. INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
  3788.     AH = 2Fh
  3789. Return: ES:BX -> current DTA
  3790. Note:    under the FlashTek X-32 DOS extender, the pointer is in ES:EBX
  3791. SeeAlso: AH=1Ah
  3792. --------D-2130-------------------------------
  3793. INT 21 - DOS 2+ - GET DOS VERSION
  3794.     AH = 30h
  3795. ---DOS 5+ ---
  3796.     AL = what to return in BH
  3797.         00h OEM number (as for DOS 2.0-4.0x)
  3798.         01h version flag
  3799. Return: AL = major version number (00h if DOS 1.x)
  3800.     AH = minor version number
  3801.     BL:CX = 24-bit user serial number (most versions do not use this)
  3802. ---if DOS <5 or AL=00h---
  3803.     BH = MS-DOS OEM number (see #0619)
  3804. ---if DOS 5+ and AL=01h---
  3805.     BH = version flag
  3806.         bit 3: DOS is in ROM
  3807.         other: reserved (0)
  3808. Notes:    the OS/2 v1.x Compatibility Box returns major version 0Ah (10)
  3809.     the OS/2 v2.x Compatibility Box returns major version 14h (20)
  3810.     OS/2 Warp 3.0 Virtual DOS Machines report v20.30.
  3811.     the Windows/NT DOS box returns version 5.00, subject to SETVER
  3812.     DOS 4.01 and 4.02 identify themselves as version 4.00; use
  3813.       INT 21/AH=87h to distinguish between the original European MS-DOS 4.0
  3814.       and the later PC-DOS 4.0x and MS-DOS 4.0x
  3815.     IBM DOS 6.1 reports its version as 6.00; use the OEM number to
  3816.       distinguish between MS-DOS 6.00 and IBM DOS 6.1 (there was never an
  3817.       IBM DOS 6.0)
  3818.     MS-DOS 6.21 reports its version as 6.20; version 6.22 returns the
  3819.       correct value
  3820.     the "Chicago" beta returns version 7.00 (reported in 
  3821.       _Microsoft_Systems_Journal_, August 1994).
  3822.     DR-DOS 5.0 and 6.0 report version 3.31; Novell DOS 7 reports IBM v6.00,
  3823.       which some software displays as IBM DOS v6.10 (because of the version
  3824.       mismatch in true IBM DOS, as mentioned above)
  3825.     generic MS-DOS 3.30, Compaq MS-DOS 3.31, and others identify themselves
  3826.       as PC-DOS by returning OEM number 00h
  3827.     the version returned under DOS 4.0x may be modified by entries in
  3828.       the special program list (see #0874 at AH=52h); the version returned
  3829.       under DOS 5+ may be modified by SETVER--use AX=3306h to get the true
  3830.       version number
  3831. SeeAlso: AX=3000h/BX=3000h,AX=3306h,AX=4452h,AH=87h,INT 15/AX=4900h
  3832. SeeAlso: INT 2F/AX=122Fh,INT 2F/AX=4010h,INT 2F/AX=E002h
  3833.  
  3834. (Table 0619)
  3835. Values for DOS OEM number:
  3836.  00h    IBM
  3837.  01h    Compaq
  3838.  02h    MS Packaged Product
  3839.  04h    AT&T
  3840.  05h    ZDS (Zenith Electronics)
  3841.  06h    Hewlett-Packard
  3842.  07h    ZDS (Groupe Bull)
  3843.  0Dh    Packard-Bell
  3844.  16h    DEC
  3845.  23h    Olivetti
  3846.  28h    Texas Instruments
  3847.  29h    Toshiba
  3848.  33h    Novell (Windows/386 device IDs only)
  3849.  34h    MS Multimedia Systems (Windows/386 device IDs only)
  3850.  35h    MS Multimedia Systems (Windows/386 device IDs only)
  3851.  4Dh    Hewlett-Packard
  3852.  5Eh    RxDOS
  3853.  66h    PhysTechSoft (PTS-DOS)
  3854.  99h    General Software's Embedded DOS
  3855.  EEh    DR-DOS
  3856.  EFh    Novell DOS
  3857.  FFh    Microsoft, Phoenix
  3858. --------E-2130-------------------------------
  3859. INT 21 - Phar Lap 386/DOS-Extender, Intel Code Builder - INSTALLATION CHECK
  3860.     AH = 30h
  3861.     EAX = 00003000h
  3862.     EBX = 50484152h ("PHAR")
  3863. Return: AL = major DOS version
  3864.     AH = minor DOS version
  3865.     EAX bits 31-16 = 4458h ('DX') if 386/DOS-extender installed
  3866.         BL = ASCII major version number
  3867.     EAX bits 31-16 = 4243h ('BC') if Intel Code Builder installed
  3868.         EDX = address of GDA
  3869. SeeAlso: AX=2501h,AX=FF00h,INT 2F/AX=F100h
  3870. --------v-2130--DXABCD-----------------------
  3871. INT 21 - VIRUS - "Possessed" - INSTALLATION CHECK
  3872.     AH = 30h
  3873.     DX = ABCDh
  3874. Return: DX = DCBAh if installed
  3875. SeeAlso: AX=0D20h,AX=30F1h
  3876. --------T-213000BX1234-----------------------
  3877. INT 21 - CTask 2.0+ - INSTALLATION CHECK
  3878.     AX = 3000h
  3879.     BX = 1234h
  3880.     DS:DX -> 8-byte version string (DX < FFF0h) "CTask21",00h for v2.1-2.2
  3881. Return: AL = DOS major version
  3882.     AH = DOS minor version
  3883.     CX:BX -> Ctask global data block
  3884. Program: CTask is a multitasking kernel for C written by Thomas Wagner
  3885. Note:    if first eight bytes of returned data block equal eight bytes passed
  3886.       in, CTask is resident
  3887. --------O-213000BX3000-----------------------
  3888. INT 21 - PC-MOS/386 v3.0 - INSTALLATION CHECK/GET VERSION
  3889.     AX = 3000h
  3890.     BX = 3000h
  3891.     CX = DX = 3000h
  3892. Return: AX = PC-MOS version
  3893. Program: PC-MOS/386 is a multitasking/multiuser MS-DOS-compatible operating
  3894.       system by The Software Link, Inc.
  3895. SeeAlso: AH=30h,INT 38/AH=02h,INT 38/AH=10h
  3896. --------G-213022-----------------------------
  3897. INT 21 - StopPrg v2.0 - INSTALLATION CHECK
  3898.     AX = 3022h
  3899. Return: AX = DOS version (see AH=30h)
  3900.     CX = 1112h if StopPrg installed
  3901.         BX = segment of resident code
  3902. Program: StopPrg is a resident program aborter by MAK-TRAXON's Prophet
  3903. Note:    StopPrg may be temporarily disabled by storing 9090h in the word at
  3904.       0000h:04FEh
  3905. --------v-2130F1-----------------------------
  3906. INT 21 - VIRUS - "Dutch-555"/"Quit 1992" - INSTALLATION CHECK
  3907.     AX = 30F1h
  3908. Return: AL = 00h if resident
  3909. SeeAlso: AH=30h/DX=ABCDh,AX=330Fh
  3910. ----------2130FFCX4445-----------------------
  3911. INT 21 - DESQ??? - INSTALLATION CHECK
  3912.     AX = 30FFh
  3913.     CX = 4445h ("DE")
  3914.     DX = 5351h ("SQ")
  3915. Return: BH = 05h if installed
  3916.     ???
  3917. Note:    called by DUBLDISK.COM v2.6; this function is not supported by
  3918.       DESQview, so it may be for DESQview's precursor DESQ.
  3919. SeeAlso: AX=4404h"DUBLDISK"
  3920. --------D-2131-------------------------------
  3921. INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
  3922.     AH = 31h
  3923.     AL = return code
  3924.     DX = number of paragraphs to keep resident
  3925. Return: never
  3926. Notes:    the value in DX only affects the memory block containing the PSP;
  3927.       additional memory allocated via AH=48h is not affected
  3928.     the minimum number of paragraphs which will remain resident is 11h
  3929.       for DOS 2.x and 06h for DOS 3+
  3930.     most TSRs can save some memory by releasing their environment block
  3931.       before terminating (see #0603 at AH=26h,AH=49h)
  3932. SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
  3933. --------D-2132-------------------------------
  3934. INT 21 - DOS 2+ - GET DOS DRIVE PARAMETER BLOCK FOR SPECIFIC DRIVE
  3935.     AH = 32h
  3936.     DL = drive number (00h = default, 01h = A:, etc)
  3937. Return: AL = status
  3938.         00h successful
  3939.         DS:BX -> Drive Parameter Block (DPB) (see #0620) for specified
  3940.               drive
  3941.         FFh invalid or network drive
  3942. Notes:    the OS/2 compatibility box supports the DOS 3.3 version of this call
  3943.       except for the DWORD at offset 12h
  3944.     this call updates the DPB by reading the disk; the DPB may be accessed
  3945.       via the DOS list of lists (see #0840 at AH=52h) if disk access is not
  3946.       desirable.
  3947.     undocumented prior to the release of DOS 5.0; only the DOS 4+ version
  3948.       of the DPB has been documented, however
  3949.     supported by DR-DOS 3.41+; DR-DOS 3.41-6.0 return the same data as
  3950.       MS-DOS 3.31
  3951. SeeAlso: AH=1Fh,AH=52h
  3952.  
  3953. Format of DOS Drive Parameter Block:
  3954. Offset    Size    Description    (Table 0620)
  3955.  00h    BYTE    drive number (00h = A:, 01h = B:, etc)
  3956.  01h    BYTE    unit number within device driver
  3957.  02h    WORD    bytes per sector
  3958.  04h    BYTE    highest sector number within a cluster
  3959.  05h    BYTE    shift count to convert clusters into sectors
  3960.  06h    WORD    number of reserved sectors at beginning of drive
  3961.  08h    BYTE    number of FATs
  3962.  09h    WORD    number of root directory entries
  3963.  0Bh    WORD    number of first sector containing user data
  3964.  0Dh    WORD    highest cluster number (number of data clusters + 1)
  3965.         16-bit FAT if greater than 0FF6h, else 12-bit FAT
  3966.  0Fh    BYTE    number of sectors per FAT
  3967.  10h    WORD    sector number of first directory sector
  3968.  12h    DWORD    address of device driver header
  3969.  16h    BYTE    media ID byte (see #0581)
  3970.  17h    BYTE    00h if disk accessed, FFh if not
  3971.  18h    DWORD    pointer to next DPB
  3972. ---DOS 2.x---
  3973.  1Ch    WORD    cluster containing start of current directory, 0000h=root,
  3974.         FFFFh = unknown
  3975.  1Eh 64 BYTEs    ASCIZ pathname of current directory for drive
  3976. ---DOS 3.x---
  3977.  1Ch    WORD    cluster at which to start search for free space when writing
  3978.  1Eh    WORD    number of free clusters on drive, FFFFh = unknown
  3979. ---DOS 4.0-6.0---
  3980.  0Fh    WORD    number of sectors per FAT
  3981.  11h    WORD    sector number of first directory sector
  3982.  13h    DWORD    address of device driver header
  3983.  17h    BYTE    media ID byte (see #0581)
  3984.  18h    BYTE    00h if disk accessed, FFh if not
  3985.  19h    DWORD    pointer to next DPB
  3986.  1Dh    WORD    cluster at which to start search for free space when writing,
  3987.         usually the last cluster allocated
  3988.  1Fh    WORD    number of free clusters on drive, FFFFh = unknown
  3989. SeeAlso: #0875
  3990. --------D-2133-------------------------------
  3991. INT 21 - DOS 2+ - EXTENDED BREAK CHECKING
  3992.     AH = 33h
  3993.     AL = subfunction
  3994.         00h get current extended break state
  3995.         Return: DL = current state, 00h = off, 01h = on
  3996.         01h set state of extended ^C/^Break checking
  3997.         DL = new state
  3998.             00h off, check only on character I/O functions
  3999.             01h on, check on all DOS functions
  4000.         Return: (Novell DOS 7) DL = old state of extended Break checks
  4001. Note:    under DOS 3.1+ and DR-DOS, this function does not use any of the
  4002.       DOS-internal stacks and may thus be called at any time
  4003. SeeAlso: AX=3302h
  4004. --------D-213302-----------------------------
  4005. INT 21 - DOS 3.x+ internal - GET AND SET EXTENDED CONTROL-BREAK CHECKING STATE
  4006.     AX = 3302h
  4007.     DL = new state (00h for OFF, 01h for ON)
  4008. Return: DL = old state of extended BREAK checking
  4009. Notes:    this function does not use any of the DOS-internal stacks and may thus
  4010.       be called at any time; one possible use is modifying Control-Break
  4011.       checking from within an interrupt handler or TSR
  4012.     not supported by DR-DOS through version 6.0; newly-supported by
  4013.       Novell DOS 7
  4014. SeeAlso: AH=33h
  4015. --------D-213303-----------------------------
  4016. INT 21 - DOS 4+ - UNUSED
  4017.     AX = 3303h
  4018. Return: nothing
  4019. Note:    this function and AX=3304h were apparently intended to support a
  4020.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4021.       to have a code page as an attribute); however, this function has
  4022.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4023.       Chapter 2 for more information
  4024. SeeAlso: AX=3304h
  4025. --------D-213304-----------------------------
  4026. INT 21 - DOS 4+ - UNUSED
  4027.     AX = 3304h
  4028. Return: nothing
  4029. Note:    this function and AX=3303h were apparently intended to support a
  4030.       code-page switching flag for OS/2 compatibility (OS/2 allows a file
  4031.       to have a code page as an attribute); however, this function has
  4032.       always been a NOP in public releases of DOS.    See _DOS_Internals_
  4033.       Chapter 2 for more information
  4034. SeeAlso: AX=3303h
  4035. --------D-213305-----------------------------
  4036. INT 21 - DOS 4+ - GET BOOT DRIVE
  4037.     AX = 3305h
  4038. Return: DL = boot drive (1=A:,...)
  4039. Notes:    fully reentrant
  4040.     NEC 9800-series PCs always call the boot drive A: and assign the other
  4041.       drive letters sequentially to the other drives in the system
  4042.     this call is supported by OS/2 Warp 3.0, but not earlier versions of
  4043.       OS/2
  4044. --------D-213306-----------------------------
  4045. INT 21 - DOS 5+ - GET TRUE VERSION NUMBER
  4046.     AX = 3306h
  4047. Return: BL = major version
  4048.     BH = minor version
  4049.     DL = revision (bits 2-0, all others 0)
  4050.     DH = version flags
  4051.         bit 3: DOS is in ROM
  4052.         bit 4: DOS is in HMA
  4053.     AL = FFh if true DOS version < 5.0
  4054. Notes:    this function always returns the true version number, unlike AH=30h,
  4055.       whose return value may be changed with SETVER
  4056.     because of the conflict from the CBIS PowerLAN redirector (see next
  4057.       entry), programs should check whether BH is less than 100 (64h)
  4058.       and BL is at least 5 before accepting the returned BX as the true
  4059.       version number; however, even this is not entirely reliable when
  4060.       that redirector is loaded
  4061.     fully reentrant
  4062.     OS/2 v2.1 will return BX=0A14h (version 20.10)
  4063.     the Windows NT DOS box returns BX=3205h (version 5.50)
  4064.     Novell DOS 7 returns IBM v6.00, which some software displays as
  4065.       IBM DOS v6.10 (because of the version mismatch in true IBM DOS
  4066.       mentioned for INT 21/AH=30h)
  4067. BUG:    DR-DOS 5.0 and 6.0 return CF set/AX=0001h for INT 21/AH=33h
  4068.       subfunctions other than 00h-02h and 05h, while MS-DOS returns AL=FFh
  4069.       for invalid subfunctions
  4070. SeeAlso: AH=30h,INT 2F/AX=122Fh
  4071. --------N-213306-----------------------------
  4072. INT 21 - CBIS POWERLAN - NETWORK REDIRECTOR - ???
  4073.     AX = 3306h
  4074. Return: AX = 3306h
  4075.     BL = ??? (usually 00h)
  4076.     BH = ??? (usually 00h or FFh)
  4077. Note:    unknown function, is in conflict with DOS 5+ version call
  4078. SeeAlso: AX=3306h"DOS"
  4079. --------v-21330F-----------------------------
  4080. INT 21 - VIRUS - "Burghofer" - INSTALLATION CHECK
  4081.     AX = 330Fh
  4082. Return: AL = 0Fh if resident (DOS returns AL=FFh)
  4083. SeeAlso: AX=30F1h,AX=33E0h
  4084. --------k-213341-----------------------------
  4085. INT 21 - Diet Disk v1.0 - INSTALLATION CHECK
  4086.     AX = 3341h
  4087. Return: DX = 1234h if installed
  4088.         CX = resident code segment
  4089. Program: Diet Disk is a public domain transparent data file compressor by
  4090.       Barry Nance
  4091. --------v-2133E0-----------------------------
  4092. INT 21 - VIRUS - "Oropax" - INSTALLATION CHECK
  4093.     AX = 33E0h
  4094. Return: AL = E0h if resident (DOS returns AL=FFh)
  4095. SeeAlso: AX=330Fh,AX=357Fh
  4096. --------D-2134-------------------------------
  4097. INT 21 - DOS 2+ - GET ADDRESS OF INDOS FLAG
  4098.     AH = 34h
  4099. Return: ES:BX -> one-byte InDOS flag
  4100. Notes:    this function executes on the DOS stack, and thus cannot be called
  4101.       while another DOS function is already executing; you should use
  4102.       this function once at the beginning of the program and store the
  4103.       returned pointer rather than calling it when requiring DOS access
  4104.     the value of InDOS is incremented whenever an INT 21 function begins
  4105.       and decremented whenever one completes
  4106.     during an INT 28 call, it is safe to call some INT 21 functions even
  4107.       though InDOS may be 01h instead of zero
  4108.     InDOS alone is not sufficient for determining when it is safe to
  4109.       enter DOS, as the critical error handling decrements InDOS and
  4110.       increments the critical error flag for the duration of the critical
  4111.       error.  Thus, it is possible for InDOS to be zero even if DOS is
  4112.       busy.
  4113.     SMARTDRV 4.0 sets the InDOS flag while flushing its buffers to disk,
  4114.       then zeros it on completion
  4115.     the critical error flag is the byte immediately following InDOS in
  4116.       DOS 2.x, and the byte BEFORE the InDOS flag in DOS 3+ and
  4117.       DR-DOS 3.41+ (except COMPAQ DOS 3.0, where the critical error flag
  4118.       is located 1AAh bytes BEFORE the critical section flag)
  4119.     for DOS 3.1+, an undocumented call exists to get the address of the
  4120.       critical error flag (see AX=5D06h)
  4121.     this function was undocumented prior to the release of DOS 5.0.
  4122. SeeAlso: AX=5D06h,AX=5D0Bh,INT 15/AX=DE1Fh,INT 28
  4123. --------D-2135-------------------------------
  4124. INT 21 - DOS 2+ - GET INTERRUPT VECTOR
  4125.     AH = 35h
  4126.     AL = interrupt number
  4127. Return: ES:BX -> current interrupt handler
  4128. Note:    under DR-DOS 5.0+, this function does not use any of the DOS-internal
  4129.       stacks and may thus be called at any time
  4130. SeeAlso: AH=25h,AX=2503h
  4131. --------E-213501-----------------------------
  4132. INT 21 P - FlashTek X-32VM - ALLOCATE PROTECTED-MODE SELECTOR
  4133.     AX = 3501h
  4134. Return: CF clear if successful
  4135.         BX = new selector
  4136.     CF set on error (no more selectors available)
  4137. Note:    the new selector will be an expand-up read/write data selector with
  4138.       undefined base and limit
  4139. SeeAlso: AX=3502h,INT 31/AX=0000h
  4140. --------E-213502-----------------------------
  4141. INT 21 P - FlashTek X-32VM - DEALLOCATE PROTECTED-MODE SELECTOR
  4142.     AX = 3502h
  4143.     BX = selector
  4144. Return: CF clear if successful
  4145.     CF set on error (invalid selector)
  4146. Note:    only selectors allocated via AX=3501h should be deallocated
  4147. SeeAlso: AX=3501h,INT 31/AX=0001h
  4148. --------E-213503-----------------------------
  4149. INT 21 P - FlashTek X-32VM - SET SELECTOR BASE ADDRESS
  4150.     AX = 3503h
  4151.     BX = selector
  4152.     ECX = base address
  4153. Return: CF clear if successful
  4154.     CF set on error (invalid selector)
  4155. SeeAlso: AX=3504h,AX=3505h,INT 31/AX=0007h
  4156. --------E-213504-----------------------------
  4157. INT 21 P - FlashTek X-32VM - GET SELECTOR BASE ADDRESS
  4158.     AX = 3504h
  4159.     BX = selector
  4160. Return: CF clear if successful
  4161.         ECX = absolute base address of selector
  4162.     CF set on error (invalid selector)
  4163. SeeAlso: AX=3503h,INT 31/AX=0006h
  4164. --------E-213505-----------------------------
  4165. INT 21 P - FlashTek X-32VM - SET SELECTOR LIMIT
  4166.     AX = 3505h
  4167.     BX = selector
  4168.     ECX = desired limit
  4169. Return: CF clear if successful
  4170.         ECX = actual limit set
  4171.     CF set on error (no more selectors available)
  4172. Note:    the limit will be rounded down to nearest 4K boundary if the requested
  4173.       limit is greater than 1MB
  4174. SeeAlso: AX=3503h,INT 31/AX=0008h
  4175. --------E-21350A-----------------------------
  4176. INT 21 P - FlashTek X-32VM - PHYSICAL ADDRESS MAPPING
  4177.     AX = 350Ah
  4178.     EBX = absolute physical address
  4179.     ECX = size in bytes of area to map
  4180. Return: CF clear if successful
  4181.     CF set on error (insufficient memory or service refused by DPMI host)
  4182. Notes:    should not make repeated calls for the same physical address
  4183.     there is no provision for unmapping memory
  4184. --------E-21350B-----------------------------
  4185. INT 21 P - FlashTek X-32VM - UPDATE AND RETURN AVAILABLE FREE MEMORY
  4186.     AX = 350Bh
  4187.     DS = default selector for DS
  4188. Return: CF clear
  4189.     EAX = maximum amount of memory which can be allocated via AX=350Ch
  4190. SeeAlso: AX=350Ch
  4191. --------E-21350C-----------------------------
  4192. INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
  4193.     AX = 350Ch
  4194.     ECX = size of block in bytes
  4195.     DS = default DS
  4196. Return: CF clear if successful
  4197.         EAX = near pointer to new block
  4198.         EDX = new lowest legal value for stack
  4199.     CF set on error (requested size not multiple of 4K)
  4200. SeeAlso: AX=350Bh,AX=350Dh
  4201. --------E-21350D-----------------------------
  4202. INT 21 P - FlashTek X-32VM - RESERVE BLOCK OF MEMORY FOR 32-BIT STACK
  4203.     AX = 350Dh
  4204.     EBX = current ESP value
  4205.     ECX = size of block in bytes
  4206.     DS = default DS
  4207. Return: CF clear if successful
  4208.         EBX = new value for ESP
  4209.         EDX = suggested new limit for SS
  4210.     CF set on error
  4211. Note:    this function should only be called once during initialization
  4212. SeeAlso: AX=350Bh,AX=350Ch
  4213. --------v-21357F-----------------------------
  4214. INT 21 - VIRUS - "Agiplan"/"Month 4-6" - INSTALLATION CHECK
  4215.     AX = 357Fh
  4216. Return: DX = FFFFh if installed
  4217. SeeAlso: AX=33E0h,AX=3DFFh
  4218. --------D-2136-------------------------------
  4219. INT 21 - DOS 2+ - GET FREE DISK SPACE
  4220.     AH = 36h
  4221.     DL = drive number (00h = default, 01h = A:, etc)
  4222. Return: AX = FFFFh if invalid drive
  4223.     else
  4224.         AX = sectors per cluster
  4225.         BX = number of free clusters
  4226.         CX = bytes per sector
  4227.         DX = total clusters on drive
  4228. Notes:    free space on drive in bytes is AX * BX * CX
  4229.     total space on drive in bytes is AX * CX * DX
  4230.     "lost clusters" are considered to be in use
  4231.     according to Dave Williams' MS-DOS reference, the value in DX is
  4232.       incorrect for non-default drives after ASSIGN is run
  4233. SeeAlso: AH=1Bh,AH=1Ch
  4234. --------D-213700-----------------------------
  4235. INT 21 - DOS 2+ - "SWITCHAR" - GET SWITCH CHARACTER
  4236.     AX = 3700h
  4237. Return: AL = status
  4238.         00h successful
  4239.         DL = current switch character
  4240.         FFh unsupported subfunction
  4241. Desc:    Determine the character which is used to introduce command switches.
  4242.       This setting is ignored by DOS commands in version 4.0 and higher,
  4243.       but is honored by many third-party programs.
  4244. Notes:    documented in some OEM versions of some releases of DOS
  4245.     supported by OS/2 compatibility box
  4246.     always returns AL=00h/DL=2Fh for MS-DOS 5+ and DR-DOS 3.41+
  4247. SeeAlso: AX=3701h
  4248. --------D-213701-----------------------------
  4249. INT 21 - DOS 2+ - "SWITCHAR" - SET SWITCH CHARACTER
  4250.     AX = 3701h
  4251.     DL = new switch character
  4252. Return: AL = status
  4253.         00h successful
  4254.         FFh unsupported subfunction
  4255. Notes:    documented in some OEM versions of some releases of DOS
  4256.     supported by OS/2 compatibility box
  4257.     ignored by MS-DOS 5+ and DR-DOS 3.41+; DR-DOS 6.0 leaves AX unchanged
  4258. SeeAlso: AX=3700h
  4259. --------D-2137-------------------------------
  4260. INT 21 - DOS 2.x and 3.3+ only - "AVAILDEV" - SPECIFY \DEV\ PREFIX USE
  4261.     AH = 37h
  4262.     AL = subfunction
  4263.         02h get availdev flag
  4264.         Return: DL = 00h \DEV\ must precede character device names
  4265.                = nonzero \DEV\ is optional
  4266.         03h set availdev flag
  4267.         DL = 00h    \DEV\ is mandatory
  4268.            = nonzero    \DEV\ is optional
  4269. Return: AL = status
  4270.         00h successful
  4271.         FFh unsupported subfunction
  4272. Notes:    all versions of DOS from 2.00 allow \DEV\ to be prepended to device
  4273.       names without generating an error even if the directory \DEV does
  4274.       not actually exist (other paths generate an error if they do not
  4275.       exist).
  4276.     although MS-DOS 3.3+ and DR-DOS 3.41+ accept these calls, they have no
  4277.       effect, and AL=02h always returns DL=FFh
  4278. --------k-2137D0BX899D-----------------------
  4279. INT 21 - DIET v1.43e - TSR INSTALLATION CHECK
  4280.     AX = 37D0h
  4281.     BX = 899Dh ('DI' + 'ET')
  4282. Return: AL = FFh if not present as TSR (default return value from DOS)
  4283.     AX = 0000h if installed as a TSR
  4284.         CX = 899Dh
  4285.         DX = version ID
  4286. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4287. SeeAlso: AX=37D1h,AX=37D2h,AX=37D4h,AX=37D6h,AX=37DFh,AX=4BF0h,AX=4BF1h
  4288. --------k-2137D1BX899D-----------------------
  4289. INT 21 - DIET v1.43e - GET DIET.EXE RESIDENT SEGMENT
  4290.     AX = 37D1h
  4291.     BX = 899Dh ('DI' + 'ET')
  4292. Return: AX = 0000h
  4293.     CX = code segment of TSR part of DIET.EXE
  4294.     DX = memory block segment of TSR DIET.EXE
  4295.         (0000h if installed as device driver)
  4296. SeeAlso: AX=37D0h,AX=37DFh
  4297. --------k-2137D2BX899D-----------------------
  4298. INT 21 - DIET v1.43e - GET TSR CONTROL FLAGS
  4299.     AX = 37D2h
  4300.     BX = 899Dh ('DI' + 'ET')
  4301. Return: AX = 0000h
  4302.     DL = control flag (00h active, else disabled)
  4303.     DH = skip flag (nonzero while TSR active)
  4304. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4305. --------k-2137D3BX899D-----------------------
  4306. INT 21 - DIET v1.43e - SET TSR CONTROL FLAGS
  4307.     AX = 37D3h
  4308.     BX = 899Dh ('DI' + 'ET')
  4309.     DL = control flag (00h active, else disabled)
  4310.     DH = skip flag (00h)
  4311. Return: AX = 0000h
  4312. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4313. --------k-2137D4BX899D-----------------------
  4314. INT 21 - DIET v1.43e - GET TSR OPTIONS
  4315.     AX = 37D4h
  4316.     BX = 899Dh ('DI' + 'ET')
  4317. Return: AX = 0000h
  4318.     DX = TSR options (see #0621)
  4319. SeeAlso: AX=37D0h,AX=37D2h,AX=37D5h
  4320.  
  4321. Bitfields for DIET TSR options:
  4322. Bit(s)    Description    (Table 0621)
  4323.  0    automated compression of DIETed file
  4324.  1    automated compression of newly-created file
  4325.  2    suppress DIET message
  4326.  3    display original file size
  4327.  4-15    reserved (0)
  4328. --------k-2137D5BX899D-----------------------
  4329. INT 21 - DIET v1.43e - SET TSR OPTIONS
  4330.     AX = 37D5h
  4331.     BX = 899Dh ('DI' + 'ET')
  4332.     DX = TSR options (see #0621)
  4333. Return: AX = 0000h
  4334. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4335. SeeAlso: AX=37D0h,AX=37D3h,AX=37D4h
  4336. --------k-2137D6BX899D-----------------------
  4337. INT 21 - DIET v1.43e - GET TEMPORARY DIRECTORY NAMES
  4338.     AX = 37D6h
  4339.     BX = 899Dh ('DI' + 'ET')
  4340. Return: AX = 0000h
  4341.     DS:DX -> name of temporary directory or 0000h:0000h for current dir
  4342. SeeAlso: AX=37D0h,AX=37D7h
  4343. --------k-2137D7BX899D-----------------------
  4344. INT 21 - DIET v1.43e - SET TEMPORARY DIRECTORY NAMES
  4345.     AX = 37D7h
  4346.     BX = 899Dh ('DI' + 'ET')
  4347.     DS:DX -> ASCIZ name of temporary directory (max 61 chars)
  4348.         0000h:0000h for current directory
  4349. Return: AX = 0000h
  4350. Note:    the specified directory name must include a drive letter and end with
  4351.       a backslash
  4352. SeeAlso: AX=37D0h,AX=37D6h
  4353. --------k-2137DCBX899D-----------------------
  4354. INT 21 - DIET v1.43e - SET ADDRESS OF EXTERNAL PROCEDURE
  4355.     AX = 37DCh
  4356.     BX = 899Dh ('DI' + 'ET')
  4357.     DS:DX -> external procedure (see #0622)
  4358. Return: AX = 0000h
  4359. Note:    the resident code will call the specified external procedure at the
  4360.       beginning of decompression and when compression is exited on failure
  4361. SeeAlso: AX=37DDh
  4362.  
  4363. (Table 0622)
  4364. Values DIET external procedure is called with:
  4365.     STACK:    WORD    class
  4366.             FFFDh creation failed for unknown reasons
  4367.             FFFEh creation failed due to lack of space
  4368.             FFFFh file creation error
  4369.             else file handle of DIETed file to be decompressed
  4370.         DWORD    -> compressed filename
  4371.         DWORD    -> decompressed or temporary filename
  4372. Return: SI,DI,BP,DS,ES must be preserved by external procedure
  4373. --------k-2137DDBX899D-----------------------
  4374. INT 21 - DIET v1.43e - RELEASE EXTERNAL PROCEDURE
  4375.     AX = 37DDh
  4376.     BX = 899Dh ('DI' + 'ET')
  4377. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4378. Note:    unlinks the external procedure specified by AX=37DCh
  4379. SeeAlso: AX=37DCh
  4380. --------k-2137DEBX899D-----------------------
  4381. INT 21 - DIET v1.43e - READ EMS STATUS
  4382.     AX = 37DEh
  4383.     BX = 899Dh ('DI' + 'ET')
  4384. Return: AX = 0000h
  4385.     CX = EMS status
  4386.         0000h not used
  4387.         0001h used as work area
  4388.         0002h used for code and as work area
  4389.     DX = EMM handle when EMS is in use
  4390. --------k-2137DFBX899D-----------------------
  4391. INT 21 - DIET v1.43e - UNLOAD TSR
  4392.     AX = 37DFh
  4393.     BX = 899Dh ('DI' + 'ET')
  4394. Return: AX = status
  4395.         0000h successful
  4396.         00FFh failed
  4397. Program: DIET is a transparent file copressor/decompressor by Teddy Matsumoto
  4398. SeeAlso: AX=37D0h
  4399. Index:    uninstall;DIET
  4400. --------D-2138-------------------------------
  4401. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  4402.     AH = 38h
  4403. --DOS 2.x--
  4404.     AL = 00h get current-country info
  4405.     DS:DX -> buffer for returned info (see #0623,#0624)
  4406. Return: CF set on error
  4407.         AX = error code (02h)
  4408.     CF clear if successful
  4409.         AX = country code (MS-DOS 2.11 only)
  4410.         buffer at DS:DX filled
  4411. --DOS 3+--
  4412.     AL = 00h for current country
  4413.     AL = 01h thru 0FEh for specific country with code <255 (see #0625)
  4414.     AL = 0FFh for specific country with code >= 255
  4415.        BX = 16-bit country code (see #0625)
  4416.     DS:DX -> buffer for returned info (see #0624)
  4417. Return: CF set on error
  4418.         AX = error code (02h)
  4419.     CF clear if successful
  4420.         AX = country code (Novell NWDOS v7.0)
  4421.         BX = country code
  4422.         DS:DX buffer filled
  4423. Note:    this function is not supported by the Borland DPMI host, but no error
  4424.       is returned; as a workaround, one should allocate a buffer in
  4425.       conventional memory with INT 31/AX=0100h and simulate an INT 21 with
  4426.       INT 31/AX=0300h
  4427. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  4428.  
  4429. Format of DOS 2.00-2.10 country info:
  4430. Offset    Size    Description    (Table 0623)
  4431.  00h    WORD    date format  0 = USA    mm dd yy
  4432.                  1 = Europe dd mm yy
  4433.                  2 = Japan    yy mm dd
  4434.  02h    BYTE    currency symbol
  4435.  03h    BYTE    00h
  4436.  04h    BYTE    thousands separator char
  4437.  05h    BYTE    00h
  4438.  06h    BYTE    decimal separator char
  4439.  07h    BYTE    00h
  4440.  08h 24 BYTEs    reserved
  4441.  
  4442. Format of DOS 2.11+ country info:
  4443. Offset    Size    Description    (Table 0624)
  4444.  00h    WORD    date format (see #0623)
  4445.  02h  5 BYTEs    ASCIZ currency symbol string
  4446.  07h  2 BYTEs    ASCIZ thousands separator
  4447.  09h  2 BYTEs    ASCIZ decimal separator
  4448.  0Bh  2 BYTEs    ASCIZ date separator
  4449.  0Dh  2 BYTEs    ASCIZ time separator
  4450.  0Fh    BYTE    currency format
  4451.         bit 2 = set if currency symbol replaces decimal point
  4452.         bit 1 = number of spaces between value and currency symbol
  4453.         bit 0 = 0 if currency symbol precedes value
  4454.             1 if currency symbol follows value
  4455.  10h    BYTE    number of digits after decimal in currency
  4456.  11h    BYTE    time format
  4457.         bit 0 = 0 if 12-hour clock
  4458.             1 if 24-hour clock
  4459.  12h    DWORD    address of case map routine
  4460.         (FAR CALL, AL = character to map to upper case [>= 80h])
  4461.  16h  2 BYTEs    ASCIZ data-list separator
  4462.  18h 10 BYTEs    reserved
  4463.  
  4464. (Table 0625)
  4465. Values for country code:
  4466.  001h    United States
  4467.  002h    Canadian-French
  4468.  003h    Latin America
  4469.  01Fh    Netherlands
  4470.  020h    Belgium
  4471.  021h    France
  4472.  022h    Spain
  4473.  024h    Hungary (not supported by DR-DOS 5.0)
  4474.  026h    Yugoslavia (not supported by DR-DOS 5.0)
  4475.  027h    Italy
  4476.  029h    Switzerland
  4477.  02Ah    Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
  4478.  02Bh    Austria (DR-DOS 5.0)
  4479.  02Ch    United Kingdom
  4480.  02Dh    Denmark
  4481.  02Eh    Sweden
  4482.  02Fh    Norway
  4483.  030h    Poland (not supported by DR-DOS 5.0)
  4484.  031h    Germany
  4485.  037h    Brazil (not supported by DR-DOS 5.0)
  4486.  03Dh    International English [Australia in DR-DOS 5.0]
  4487.  051h    Japan (DR-DOS 5.0, MS-DOS 5.0+)
  4488.  052h    Korea (DR-DOS 5.0)
  4489.  056h    China (MS-DOS 5.0+)
  4490.  058h    Taiwan (MS-DOS 5.0+)
  4491.  05Ah    Turkey (MS-DOS 5.0+)
  4492.  15Fh    Portugal
  4493.  162h    Iceland
  4494.  166h    Finland
  4495.  311h    Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
  4496.  3CCh    Israel (DR-DOS 5.0,MS-DOS 5.0+)
  4497. --------D-2138--DXFFFF-----------------------
  4498. INT 21 - DOS 3+ - SET COUNTRY CODE
  4499.     AH = 38h
  4500.     DX = FFFFh
  4501.     AL = 01h thru FEh for specific country with code <255
  4502.     AL = FFh for specific country with code >= 255
  4503.        BX = 16-bit country code (see #0625)
  4504. Return: CF set on error
  4505.         AX = error code (see #0885 at AH=59h)
  4506.     CF clear if successful
  4507. Note:    not supported by OS/2
  4508. SeeAlso: INT 2F/AX=1403h
  4509. --------D-2139-------------------------------
  4510. INT 21 - DOS 2+ - "MKDIR" - CREATE SUBDIRECTORY
  4511.     AH = 39h
  4512.     DS:DX -> ASCIZ pathname
  4513. Return: CF clear if successful
  4514.         AX destroyed
  4515.     CF set on error
  4516.         AX = error code (03h,05h) (see #0885 at AH=59h)
  4517. Notes:    all directories in the given path except the last must exist
  4518.     fails if the parent directory is the root and is full
  4519.     DOS 2.x-3.3 allow the creation of a directory sufficiently deep that
  4520.       it is not possible to make that directory the current directory
  4521.       because the path would exceed 64 characters
  4522.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4523. SeeAlso: AH=3Ah,AH=3Bh,AH=6Dh,AH=71h,AH=E2h/SF=0Ah,INT 2F/AX=1103h
  4524. SeeAlso: INT 60/DI=0511h
  4525. --------D-213A-------------------------------
  4526. INT 21 - DOS 2+ - "RMDIR" - REMOVE SUBDIRECTORY
  4527.     AH = 3Ah
  4528.     DS:DX -> ASCIZ pathname of directory to be removed
  4529. Return: CF clear if successful
  4530.         AX destroyed
  4531.     CF set on error
  4532.         AX = error code (03h,05h,06h,10h) (see #0885 at AH=59h)
  4533. Notes:    directory must be empty (contain only '.' and '..' entries)
  4534.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4535. SeeAlso: AH=39h,AH=3Bh,AH=71h,AH=E2h/SF=0Bh,INT 2F/AX=1101h,INT 60/DI=0512h
  4536. --------D-213B-------------------------------
  4537. INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
  4538.     AH = 3Bh
  4539.     DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
  4540. Return: CF clear if successful
  4541.         AX destroyed
  4542.     CF set on error
  4543.         AX = error code (03h) (see #0885 at AH=59h)
  4544. Notes:    if new directory name includes a drive letter, the default drive is
  4545.       not changed, only the current directory on that drive
  4546.     changing the current directory also changes the directory in which
  4547.       FCB file calls operate
  4548.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4549. SeeAlso: AH=47h,AH=71h,INT 2F/AX=1105h
  4550. --------D-213C-------------------------------
  4551. INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
  4552.     AH = 3Ch
  4553.     CX = file attributes (see #0626)
  4554.     DS:DX -> ASCIZ filename
  4555. Return: CF clear if successful
  4556.         AX = file handle
  4557.     CF set on error
  4558.         AX = error code (03h,04h,05h) (see #0885 at AH=59h)
  4559. Notes:    if a file with the given name exists, it is truncated to zero length
  4560.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4561.     DR-DOS checks the system password or explicitly supplied password at
  4562.       the end of the filename against the reserved field in the directory
  4563.       entry before allowing access
  4564. SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h
  4565.  
  4566. Bitfields for file attributes:
  4567. Bit(s)    Description    (Table 0626)
  4568.  0    read-only
  4569.  1    hidden
  4570.  2    system
  4571.  3    volume label (ignored)
  4572.  4    reserved, must be zero (directory)
  4573.  5    archive bit
  4574.  7    if set, file is shareable under Novell NetWare
  4575. --------D-213D-------------------------------
  4576. INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
  4577.     AH = 3Dh
  4578.     AL = access and sharing modes (see #0627)
  4579.     DS:DX -> ASCIZ filename
  4580.     CL = attribute mask of files to look for (server call only)
  4581. Return: CF clear if successful
  4582.         AX = file handle
  4583.     CF set on error
  4584.         AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #0885 at AH=59h)
  4585. Notes:    file pointer is set to start of file
  4586.     file handles which are inherited from a parent also inherit sharing
  4587.       and access restrictions
  4588.     files may be opened even if given the hidden or system attributes
  4589.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4590.     DR-DOS checks the system password or explicitly supplied password at
  4591.       the end of the filename against the reserved field in the directory
  4592.       entry before allowing access
  4593.     sharing modes are only effective on local drives if SHARE is loaded
  4594. SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h
  4595.  
  4596. Bitfields for access and sharing modes:
  4597. Bit(s)    Description    (Table 0627)
  4598.  2-0    access mode
  4599.     000 read only
  4600.     001 write only
  4601.     010 read/write
  4602.     011 (DOS 5+ internal) passed to redirector on EXEC to allow
  4603.         case-sensitive filenames
  4604.  3    reserved (0)
  4605.  6-4    sharing mode (DOS 3+) (see #0628)
  4606.     000 compatibility mode
  4607.     001 "DENYALL" prohiboth read and write access by others
  4608.     010 "DENYWRITE" prohiwrite access by others
  4609.     011 "DENYREAD" prohiread access by others
  4610.     100 "DENYNONE" allow full access by others
  4611.     111 network FCB (only available during server call)
  4612.  7    inheritance
  4613.     if set, file is private to current process and will not be inherited
  4614.       by child processes
  4615.  
  4616. (Table 0628)
  4617. Values of DOS file sharing behavior:
  4618.       |    Second and subsequent Opens
  4619.  First      |Compat  Deny      Deny     Deny    Deny
  4620.  Open      |       All      Write     Read    None
  4621.       |R W RW R W RW R W RW R W RW R W RW
  4622.  - - - - -| - - - - - - - - - - - - - - - - -
  4623.  Compat R |Y Y Y  N N N     1 N N    N N N  1 N N
  4624.     W |Y Y Y  N N N     N N N    N N N  N N N
  4625.     RW|Y Y Y  N N N     N N N    N N N  N N N
  4626.  - - - - -|
  4627.  Deny    R |C C C  N N N     N N N    N N N  N N N
  4628.  All    W |C C C  N N N     N N N    N N N  N N N
  4629.     RW|C C C  N N N     N N N    N N N  N N N
  4630.  - - - - -|
  4631.  Deny    R |2 C C  N N N     Y N N    N N N  Y N N
  4632.  Write    W |C C C  N N N     N N N    Y N N  Y N N
  4633.     RW|C C C  N N N     N N N    N N N  Y N N
  4634.  - - - - -|
  4635.  Deny    R |C C C  N N N     N Y N    N N N  N Y N
  4636.  Read    W |C C C  N N N     N N N    N Y N  N Y N
  4637.     RW|C C C  N N N     N N N    N N N  N Y N
  4638.  - - - - -|
  4639.  Deny    R |2 C C  N N N     Y Y Y    N N N  Y Y Y
  4640.  None    W |C C C  N N N     N N N    Y Y Y  Y Y Y
  4641.     RW|C C C  N N N     N N N    N N N  Y Y Y
  4642. Legend: Y = open succeeds, N = open fails with error code 05h
  4643.     C = open fails, INT 24 generated
  4644.     1 = open succeeds if file read-only, else fails with error code
  4645.     2 = open succeeds if file read-only, else fails with INT 24
  4646. SeeAlso: #0848
  4647. --------v-213DFF-----------------------------
  4648. INT 21 - VIRUS - "JD-448" - INSTALLATION CHECK
  4649.     AX = 3DFFh
  4650. Return: AX = 4A44h if resident
  4651. SeeAlso: AX=357Fh,AX=4203h
  4652. --------D-213E-------------------------------
  4653. INT 21 - DOS 2+ - "CLOSE" - CLOSE FILE
  4654.     AH = 3Eh
  4655.     BX = file handle
  4656. Return: CF clear if successful
  4657.         AX destroyed
  4658.     CF set on error
  4659.         AX = error code (06h) (see #0885 at AH=59h)
  4660. Note:    if the file was written to, any pending disk writes are performed, the
  4661.       time and date stamps are set to the current time, and the directory
  4662.       entry is updated
  4663. SeeAlso: AH=10h,AH=3Ch,AH=3Dh,INT 2F/AX=1106h,INT 2F/AX=1227h
  4664. --------D-213F-------------------------------
  4665. INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
  4666.     AH = 3Fh
  4667.     BX = file handle
  4668.     CX = number of bytes to read
  4669.     DS:DX -> buffer for data
  4670. Return: CF clear if successful
  4671.         AX = number of bytes actually read (0 if at EOF before call)
  4672.     CF set on error
  4673.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4674. Notes:    data is read beginning at current file position, and the file position
  4675.       is updated after a successful read
  4676.     the returned AX may be smaller than the request in CX if a partial
  4677.       read occurred
  4678.     if reading from CON, read stops at first CR
  4679.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  4680. BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
  4681.       a record lock (see AH=5Ch), though it does return AX=0005h; this
  4682.       has been documented by Novell
  4683. SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
  4684. --------G-213F-------------------------------
  4685. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - READ STATUS BLOCK
  4686.     AH = 3Fh
  4687.     BX = handle for character device "TDHDEBUG"
  4688.     CX = number of bytes to read
  4689.     DS:DX -> buffer for status block (see #0630)
  4690. Return: CF clear if successful
  4691.         AX = number of bytes actually read
  4692.     CF set on error
  4693.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4694. SeeAlso: AH=40h"Turbo Debug"
  4695.  
  4696. (Table 0629)
  4697. Values for status of Turbo Debugger command:
  4698.  00h    successful
  4699.  01h    invalid handle
  4700.  02h    no more breakpoints available
  4701.  03h    hardware does not support specified breakpoint type
  4702.  04h    previous command prevents execution
  4703.  05h    debugger hardware not found
  4704.  06h    hardware failure
  4705.  07h    invalid command
  4706.  08h    driver not initialized yet
  4707.  FEh    recursive entry (hardware breakpoint inside hw bp handler)
  4708.  
  4709. Format of Turbo Debugger status block:
  4710. Offset    Size    Description    (Table 0630)
  4711.  00h    BYTE    status of command (see #0629)
  4712. ---status for command 01h---
  4713.  01h    WORD    device driver interface version number (currently 1)
  4714.  03h    WORD    device driver software version
  4715.  05h    BYTE    maximum simultaneous hardware breakpoints
  4716.  06h    BYTE    configuration bits (see #0631)
  4717.  07h    BYTE    supported breakpoint types (see #0632)
  4718.  08h    WORD    supported addressing match modes (see #0633)
  4719.  0Ah    WORD    supported data matches (see #0634)
  4720.  0Ch    BYTE    maximum data match length (01h, 02h, or 04h)
  4721.  0Dh    WORD    size of onboard memory (in KB)
  4722.  0Fh    WORD    maximum number of trace-back events
  4723.  11h    WORD    hardware breakpoint enable byte address segment (0000h if not
  4724.           supported)
  4725. ---status for command 04h---
  4726.  01h    BYTE    handle to use when referring to the just-set breakpoint
  4727.  
  4728. Bitfields for Turbo Debugger configuration bits:
  4729. Bit(s)    Description    (Table 0631)
  4730.  0    CPU and DMA accesses are distinct
  4731.  1    can detect DMA transfers
  4732.  2    supports data mask
  4733.  3    hardware pass counter on breakpoints
  4734.  4    can match on data as well as addresses
  4735.  
  4736. Bitfields for Turbo Debugger supported breakpoint types:
  4737. Bit(s)    Description    (Table 0632)
  4738.  0    memory read
  4739.  1    memory write
  4740.  2    memory read/write
  4741.  3    I/O read
  4742.  4    I/O write
  4743.  5    I/O read/write
  4744.  6    instruction fetch
  4745.  
  4746. Bitfields for Turbo Debugger supported addressing match modes:
  4747. Bit(s)    Description    (Table 0633)
  4748.  0    any address
  4749.  1    equal to test value
  4750.  2    not equal
  4751.  3    above test value
  4752.  4    below test value
  4753.  5    below or equal
  4754.  6    above or equal
  4755.  7    within range
  4756.  8    outside range
  4757.  
  4758. Bitfields for Turbo Debugger supported data matches:
  4759. Bit(s)    Description    (Table 0634)
  4760.  0    any data
  4761.  1    equal to test value
  4762.  2    not equal
  4763.  3    above test value
  4764.  4    below test value
  4765.  5    below or equal
  4766.  6    above or equal
  4767.  7    within range
  4768.  8    outside range
  4769. --------N-213F-------------------------------
  4770. INT 21 - PC/TCP IPCUST.SYS - READ CONFIGURATION DATA
  4771.     AH = 3Fh
  4772.     BX = handle for character device "$IPCUST"
  4773.     CX = number of bytes to read
  4774.     DS:DX -> buffer for configuration data (see #0635)
  4775. Return: CF clear if successful
  4776.         AX = number of bytes actually read
  4777.     CF set on error
  4778.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4779. Notes:    if less than the entire data is read or written, the next read/write
  4780.       continues where the previous one ended; IOCTL calls AX=4402h and
  4781.       AX=4403h both reset the location at which the next operation starts
  4782.       to zero
  4783.     the data pointer is also reset to zero if the previous read or write
  4784.       reached or exceeded the end of the data, when the current function
  4785.       is read and the previous was write, or vice versa
  4786.     v2.1+ uses a new configuration method, but allows the installation
  4787.       of IPCUST.SYS for backward compatibility with other software which
  4788.       must read the PC/TCP configuration
  4789. SeeAlso: AH=40h"IPCUST",AX=4402h"IPCUST",AX=4402h"FTPSOFT"
  4790.  
  4791. Format of PC/TCP configuration data:
  4792. Offset    Size    Description    (Table 0635)
  4793.  00h 12 BYTEs    IPCUST.SYS device driver header
  4794.  12h    BYTE    ???
  4795.  13h    BYTE    ???
  4796.  14h    WORD    ???
  4797.  16h    BYTE    bit flags
  4798.         bit 0: send BS rather than DEL for BackSpace key
  4799.         bit 1: wrap long lines
  4800.  17h    BYTE    ???
  4801.  18h 64 BYTEs    ASCIZ hostname
  4802.  58h 64 BYTEs    ASCIZ domain name
  4803.         (fully qualified domain name is hostname.domain-name)
  4804.  98h 16 BYTEs    ASCIZ username
  4805.  A8h 64 BYTEs    ASCIZ full name
  4806.  E8h 64 BYTEs    ASCIZ office address
  4807. 128h 32 BYTEs    ASCIZ phone number
  4808. 148h    WORD    offset from GMT in minutes
  4809. 14Ah  4 BYTEs    ASCIZ timezone name
  4810. 14Eh    WORD    number of time servers
  4811. 150h  ? DWORDs    (big-endian) IP addresses for time servers
  4812.     ???
  4813. 164h    WORD    number of old-style name servers
  4814. 166h  3 DWORDs    (big-endian) IP addresses for name servers
  4815. 172h    WORD    number of domain name servers
  4816. 174h  3 DWORDs    (big-endian) IP addresses for domain name servers
  4817. 180h    DWORD    (big-endian) IP address of default gateway
  4818. 184h    DWORD    (big-endian) IP address of log server
  4819. 188h    DWORD    (big-endian) IP address of cookie server
  4820. 18Ch    DWORD    (big-endian) IP address of lpr server
  4821. 190h    DWORD    (big-endian) IP address of imagen print server
  4822. 194h 54 BYTEs    ???
  4823. 1E8h    WORD    TCP default window size in bytes
  4824. 1EAh    WORD    TCP low window size
  4825. 1ECh 64 BYTEs    ASCIZ host tabel filename
  4826. 22Ch  2 BYTEs    ???
  4827. 22Eh 80 BYTEs    ASCIZ mail relay host name
  4828. 27Eh    BYTE    ???
  4829. 27Fh    BYTE    ??? bit flags
  4830. 280h 44 BYTEs    ???
  4831. 2ACh    WORD    ???
  4832. 2AEh 202 BYTEs    ???
  4833. --------N-213F-------------------------------
  4834. INT 21 - WORKGRP.SYS - GET ENTRY POINT
  4835.     AH = 3Fh
  4836.     BX = file handle for device "NET$HLP$"
  4837.     CX = 0008h
  4838.     DS:DX -> buffer for entry point record (see #0705)
  4839. Return: CF clear if successful
  4840.         AX = number of bytes actually read (0 if at EOF before call)
  4841.     CF set on error
  4842.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4843. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  4844.       permits communication with PCs running Windows for Workgroups or
  4845.       LAN Manager
  4846. SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h
  4847. --------N-213F-------------------------------
  4848. INT 21 - BW-TCP - GET DRIVER INFO
  4849.     AH = 3Fh
  4850.     BX = file handle for device "ETHDEV27"
  4851.     CX = 002Bh
  4852.     DS:DX -> buffer for driver info (see #0636)
  4853. Return: CF clear if successful
  4854.         AX = number of bytes actually read (0 if at EOF before call)
  4855.     CF set on error
  4856.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4857. Program: BW-TCP is a TCP/IP protocol stack by Beame & Whiteside Software
  4858. Notes:    the B&W socket library performs an INT 21/AX=4401h with DX=0060h before
  4859.       making this call to retrieve the driver information; one should also
  4860.       call the private API interrupt with AH=15h
  4861.     the installation check for the TCP/IP stack is to test for the
  4862.       existence of the character device UDP-IP10
  4863. SeeAlso: INT 14/AH=56h,INT 62/AH=00h"ETHDEV",INT 63/AH=03h,INT 64/AH=00h
  4864. Index:    installation check;BW-TCP hardware driver
  4865. Index:    installation check;BW-TCP TCPIP.SYS
  4866.  
  4867. Format of BW-TCP driver info:
  4868. Offset    Size    Description    (Table 0636)
  4869.  00h    WORD    I/O base address
  4870.  02h    BYTE    shared memory page (01h = segment 0100h, etc.)
  4871.  03h    BYTE    interrupt vector for private API
  4872.  04h    BYTE    IRQ used by board
  4873.  05h    WORD    size of data buffer
  4874.  07h    WORD    maximum transfer window
  4875.  09h    WORD    time zone
  4876.  0Bh    BYTE    address type (01h user, 04h RARP, 05h BOOTP)
  4877.  0Ch    DWORD    internet address
  4878.  10h    WORD    "value" ???
  4879.  12h    BYTE    subnet mask
  4880.  13h    WORD    "ether_pointer" ???
  4881.  15h    WORD    offset in device driver of log server records (see #0637)
  4882.  17h    WORD    offset in device driver of name server records (see #0637)
  4883.  19h    WORD    offset in device driver of print server records (see #0637)
  4884.  1Bh    WORD    offset in device driver of time server records (see #0637)
  4885.  1Dh    WORD    offset in device driver of gateway records (see #0637)
  4886.  1Fh    WORD    segment address of device driver
  4887.  21h    BYTE    transfer size
  4888.  22h  9 BYTEs    network adapter board name
  4889. ---11/21/91+ ---
  4890.  23h    BYTE    ETHDEV version (major in high nybble, minor in low nybble)
  4891.  24h    BYTE    ETHDEV revision
  4892.  25h    BYTE    TCPIP version (major in high nybble, minor in low nybble)
  4893.  26h    BYTE    TCPIP revision
  4894.  27h    BYTE    BWRPC version (major in high nybble, minor in low nybble)
  4895.  28h    BYTE    BWRPC revision
  4896.  29h    BYTE    BWNFS version (major in high nybble, minor in low nybble)
  4897.  2Ah    BYTE    BWNFS revision
  4898.  2Bh    BYTE    Telnet version (major in high nybble, minor in low nybble)
  4899.  2Ch    BYTE    Telnet revision
  4900.  2Dh    BYTE    NETBIOS version (major in high nybble, minor in low nybble)
  4901.  2Eh    BYTE    NETBIOS revision
  4902. Note:    for each driver, if version=0, the driver is not installed or does
  4903.       not support the version check
  4904.  
  4905. Format of BW-TCP server records:
  4906. Offset    Size    Description    (Table 0637)
  4907.  00h    BYTE    number of server records following
  4908.  01h  N DWORDs    internet addresses of servers
  4909. --------y-213F-------------------------------
  4910. INT 21 - Trusted Access - NB.SYS - GET STATE
  4911.     AH = 3Fh
  4912.     BX = file handle for device "$$NB$$NB"
  4913.     CX = 0002h (size of state)
  4914.     DS:DX -> buffer for state record (see #0638)
  4915. Return: CF clear if successful
  4916.         AX = number of bytes actually read (0 if at EOF before call)
  4917.     CF set on error
  4918.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4919. Program: Trusted Access is a security and access-control package by Lassen
  4920.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  4921.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  4922. SeeAlso: AH=40h"NB.SYS",AX=4101h
  4923.  
  4924. Format of Trusted Access state record:
  4925. Offset    Size    Description    (Table 0638)
  4926.  00h    BYTE    00h off, 01h on
  4927.  01h    BYTE    keys being disabled
  4928.         bit 0: Ctrl-Break
  4929.         bit 1: SysReq
  4930.         bit 2: Ctrl and Alt
  4931.         bit 3: Ctrl-Alt-Del
  4932.         bit 7: all keys (overrides other bits)
  4933. ----------213F-------------------------------
  4934. INT 21 U - IFSHLP.SYS - GET ENTRY POINT
  4935.     AH = 3Fh
  4936.     BX = file handle for device "IFS$HLP$"
  4937.     CX = 0008h (size of buffer in bytes)
  4938.     DS:DX -> buffer for entry point record (see #0639)
  4939. Return: CF clear if successful
  4940.         AX = number of bytes actually read (0 if at EOF before call)
  4941.     CF set on error
  4942.         AX = error code (05h,06h) (see #0885 at AH=59h)
  4943. Program: IFSHLP.SYS is a support driver for Microsoft Windows for Workgroups
  4944. SeeAlso: AX=4402h"IFSHLP"
  4945.  
  4946. Format of IFSHLP.SYS entry point record:
  4947. Offset    Size    Description    (Table 0639)
  4948.  00h  4 BYTEs    (call) signature 70h E9h 34h 37h
  4949.         signature must be 34h 37h 70h EFh if called via IOCTL
  4950.  04h    DWORD    (ret) pointer to FAR call entry point (see #0640)
  4951.  
  4952. (Table 0640)
  4953. Call IFSHLP.SYS entry point with:
  4954.     STACK:    WORD    function number (00h-0Ch)
  4955.             00h ???
  4956.             01h set ??? intercept
  4957.             02h remove ??? intercept
  4958.             03h ??? LPT2
  4959.             04h ??? LPT1
  4960.             05h ??? and remove ??? intercept
  4961.             06h set ??? flag
  4962.             07h clear ??? flag
  4963.             08h get ??? flag word
  4964.             09h ???
  4965.             0Ah ???
  4966.             0Bh ???
  4967.             0Ch get ???
  4968. ---if function 00h---
  4969. Return: AX = ??? (0024h seen)
  4970.     DX = resident code segment
  4971. ---if function 01h---
  4972.     STACK:    DWORD    new intercept address
  4973. Return: AX = status
  4974.         0000h successful
  4975.         0001h failed (already set)
  4976.         DX = 0000h
  4977. ---if function 02h---
  4978. Return: AX = status
  4979.         0000h successful
  4980.         0001h failed (not set)
  4981.     DX = 0000h
  4982. ---if function 03h,04h---
  4983.     STACK:    WORD    ???
  4984. Return: AX = 0000h
  4985.     DX = 0000h
  4986. ---if function 05h---
  4987.     ???
  4988. ---if function 06h---
  4989. Return: AX = 0001h and DX = 0000h if already set
  4990.     AX,DX unchanged if successful
  4991. ---if function 07h---
  4992. Return: AX = 0001h and DX = 0000h if not set
  4993.     AX,DX unchanged if successful
  4994. ---if function 08h---
  4995. Return: DX = 0000h
  4996.     AX = flags (bit 0 set/cleared by functions 06h and 07h)
  4997. ---if function 09h---
  4998. Return: AX = status
  4999.         0000h successful
  5000.         0001h failed (already called)
  5001. ---if function 0Ah---
  5002.     STACK:    WORD    ???
  5003.     ???
  5004. ---if function 0Bh---
  5005. Return: AX = status
  5006.         0000h successful
  5007.         0001h failed (not set)
  5008. ---if function 0Ch---
  5009. Return: AX = 0000h
  5010.     ES:BX -> ??? data
  5011. ---if function > 0Ch---
  5012. Return:    AX = 0001h
  5013.     DX = 0000h
  5014. --------D-2140-------------------------------
  5015. INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
  5016.     AH = 40h
  5017.     BX = file handle
  5018.     CX = number of bytes to write
  5019.     DS:DX -> data to write
  5020. Return: CF clear if successful
  5021.         AX = number of bytes actually written
  5022.     CF set on error
  5023.         AX = error code (05h,06h) (see #0885 at AH=59h)
  5024. Notes:    if CX is zero, no data is written, and the file is truncated or
  5025.       extended to the current position
  5026.     data is written beginning at the current file position, and the file
  5027.       position is updated after a successful write
  5028.     the usual cause for AX < CX on return is a full disk
  5029. BUG:    a write of zero bytes will appear to succeed when it actually failed
  5030.       if the write is extending the file and there is not enough disk
  5031.       space for the expanded file (DOS 5.0-6.0); one should therefore check
  5032.       whether the file was in fact extended by seeking to 0 bytes from
  5033.       the end of the file (INT 21/AX=4202h/CX=0/DX=0)
  5034.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5035. SeeAlso: AH=28h,AH=3Fh,AH=93h,INT 2F/AX=1109h
  5036. --------G-2140-------------------------------
  5037. INT 21 - Turbo Debug HARDWARE BREAKPOINTS - SEND CMD TO HARDWARE BRKPNT DRIVER
  5038.     AH = 40h
  5039.     BX = handle for character device "TDHDEBUG"
  5040.     CX = number of bytes to write
  5041.     DS:DX -> hardware breakpoint command (see #0641)
  5042. Return: CF clear if successful
  5043.         AX = number of bytes actually written
  5044.     CF set on error
  5045.         AX = error code (05h,06h) (see #0885 at AH=59h)
  5046. Note:    results are retrieved by reading from the device
  5047. SeeAlso: AH=3Fh"Turbo Debug"
  5048.  
  5049. Format of Turbo Debugger hardware breakpoint commands:
  5050. Offset    Size    Description    (Table 0641)
  5051.  00h    BYTE    command code
  5052.         00h install interrupt vectors
  5053.         01h get hardware capabilities
  5054.         02h enable hardware breakpoints
  5055.         03h disable hardware breakpoints
  5056.         04h set hardware breakpoint
  5057.         05h clear hardware breakpoint
  5058.         06h set I/O base address and reset hardware
  5059.         07h restore interrupt vectors
  5060. ---command code 00h---
  5061.  01h    DWORD    pointer to Turbo Debugger entry point to be jumped to on
  5062.           hardware breakpoint; call with CPU state the same as on
  5063.           the breakpoint except for pushing AX and placing an entry
  5064.           code (FFh if breakout button or breakpoint handle) in AH
  5065. ---command code 04h---
  5066.  01h    BYTE    breakpoint type
  5067.         00h memory read
  5068.         01h memory write
  5069.         02h memory read/write
  5070.         03h I/O read
  5071.         04h I/O write
  5072.         05h I/O read/write
  5073.         06h instruction fetch
  5074.  02h    BYTE    address matching mode (see #0642)
  5075.  03h    DWORD    32-bit linear low address
  5076.  07h    DWORD    32-bit linear high address
  5077.  0Bh    WORD    pass count
  5078.  0Dh    BYTE    data size (01h, 02h, or 04h)
  5079.  0Eh    BYTE    source of matched bus cycle (01h CPU, 02h DMA, 03h either)
  5080.  0Fh    BYTE    data-matching mode (see #0642)
  5081.  10h    DWORD    low data value
  5082.  14h    DWORD    high data value
  5083.  18h    DWORD    data mask specifying which bits of the data are tested
  5084. ---command code 05h---
  5085.  01h    BYTE    handle of breakpoint to clear (breakpoint returned from command
  5086.           04h)
  5087. ---command code 06h---
  5088.  01h    WORD    base address of hardware debugger board
  5089.  
  5090. (Table 0642)
  5091. Values for Turbo Debugger address/data matching mode:
  5092.  00h    match any
  5093.  01h    equal to test value
  5094.  02h    different from test value
  5095.  03h    above test value
  5096.  04h    below test value
  5097.  05h    below or equal to test value
  5098.  06h    above or equal to test value
  5099.  07h    within inclusive range
  5100.  08h    outside specified range
  5101. --------N-2140-------------------------------
  5102. INT 21 - PC/TCP IPCUST.SYS - WRITE CONFIGURATION DATA
  5103.     AH = 40h
  5104.     BX = handle for character device "$IPCUST"
  5105.     CX = number of bytes to write
  5106.     DS:DX -> buffer for configuration data (AH=3Fh"IPCUST")
  5107. Return: CF clear if successful
  5108.         AX = number of bytes actually written
  5109.     CF set on error
  5110.         AX = error code (05h,06h) (see #0885 at AH=59h)
  5111. Notes:    if less than the entire data is read or written, the next read/write
  5112.       continues where the previous one ended; IOCTL calls AX=4402h and
  5113.       AX=4403h both reset the location at which the next operation starts
  5114.       to zero
  5115.     the data pointer is also reset to zero if the previous read or write
  5116.       reached or exceeded the end of the data, when the current function
  5117.       is read and the previous was write, or vice versa
  5118.     v2.1+ uses a new configuration method, but allows the installation
  5119.       of IPCUST.SYS for backward compatibility with other software which
  5120.       must read the PC/TCP configuration
  5121. SeeAlso: AH=3Fh"IPCUST",AX=4402h"IPCUST"
  5122. --------y-2140-------------------------------
  5123. INT 21 U - Trusted Access - NB.SYS - SET STATE
  5124.     AH = 40h
  5125.     BX = handle for character device "$$NB$$NB"
  5126.     DS:DX -> state record (see #0638)
  5127.     CX ignored
  5128. Return: CF clear if successful
  5129.         AX = number of bytes actually written
  5130.     CF set on error
  5131.         AX = error code (05h,06h) (see #0885 at AH=59h)
  5132. Program: Trusted Access is a security and access-control package by Lassen
  5133.       Software, Inc.; NB.SYS is a device driver to prevent the user from
  5134.       terminating CONFIG.SYS or AUTOEXEC.BAT with Ctrl-Break
  5135. SeeAlso: AH=3Fh"NB.SYS"
  5136. --------j-214000BX0002-----------------------
  5137. INT 21 - FARTBELL.EXE - INSTALLATION CHECK
  5138.     AX = 4000h
  5139.     BX = 0002h
  5140.     CX = 0000h
  5141.     DS:DX = 0000h:0000h
  5142. Return: CF clear if installed
  5143.         AX = CS of resident code
  5144. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5145.       noises when programs output a bell
  5146. SeeAlso: AX=4001h
  5147. --------j-214001BX0002-----------------------
  5148. INT 21 - FARTBELL.EXE - FORCE NOISE
  5149.     AX = 4001h
  5150.     BX = 0002h
  5151.     CX = 0000h
  5152.     DS:DX = 0000h:0000h
  5153. Program: FARTBELL is a joke program by Guenther Thiele which makes various
  5154.       noises when programs output a bell
  5155. SeeAlso: AX=4000h
  5156. --------D-2141-------------------------------
  5157. INT 21 - DOS 2+ - "UNLINK" - DELETE FILE
  5158.     AH = 41h
  5159.     DS:DX -> ASCIZ filename (no wildcards, but see notes)
  5160.     CL = attribute mask for deletion (server call only, see notes)
  5161. Return: CF clear if successful
  5162.         AX destroyed (DOS 3.3) AL seems to be drive of deleted file
  5163.     CF set on error
  5164.         AX = error code (02h,03h,05h) (see #0885 at AH=59h)
  5165. Notes:    (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  5166.       the filespec must be canonical (as returned by AH=60h), and only
  5167.       files matching the attribute mask in CL are deleted
  5168.     DR-DOS 5.0-6.0 returns error code 03h if invoked via AX=5D00h
  5169.     DOS does not erase the file's data; it merely becomes inaccessible
  5170.       because the FAT chain for the file is cleared
  5171.     deleting a file which is currently open may lead to filesystem
  5172.       corruption.  Unless SHARE is loaded, DOS does not close the handles
  5173.       referencing the deleted file, thus allowing writes to a nonexistant
  5174.       file.
  5175.     under DRDOS and DR Multiuser DOS, this function will fail if the file
  5176.       is currently open
  5177.     under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
  5178. BUG:    DR-DOS 3.41 crashes if called via AX=5D00h
  5179. SeeAlso: AH=13h,AX=4301h,AX=4380h,AX=5D00h,AH=60h,AH=71h,AX=F244h
  5180. SeeAlso: INT 2F/AX=1113h
  5181. --------y-214101DXFFFE-----------------------
  5182. INT 21 - SoftLogic Data Guardian - ???
  5183.     AX = 4101h
  5184.     DX = FFFEh
  5185. Return: AX = 0000h if installed
  5186. Note:    resident code sets several internal variables on this call
  5187. SeeAlso: AH=3Fh"NB.SYS",INT 16/AX=FFA3h/BX=0000h
  5188. --------D-2142-------------------------------
  5189. INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
  5190.     AH = 42h
  5191.     AL = origin of move
  5192.         00h start of file
  5193.         01h current file position
  5194.         02h end of file
  5195.     BX = file handle
  5196.     CX:DX = offset from origin of new file position
  5197. Return: CF clear if successful
  5198.         DX:AX = new file position in bytes from start of file
  5199.     CF set on error
  5200.         AX = error code (01h,06h) (see #0885 at AH=59h)
  5201. Notes:    for origins 01h and 02h, the pointer may be positioned before the
  5202.       start of the file; no error is returned in that case, but subsequent
  5203.       attempts at I/O will produce errors
  5204.     if the new position is beyond the current end of file, the file will
  5205.       be extended by the next write (see AH=40h)
  5206. BUG:    using this method to grow a file from zero bytes to a very large size
  5207.       can corrupt the FAT in some versions of DOS; the file should first
  5208.       be grown from zero to one byte and then to the desired large size
  5209. SeeAlso: AH=24h,INT 2F/AX=1228h
  5210. --------v-214203-----------------------------
  5211. INT 21 - VIRUS - "Shake" - INSTALLATION CHECK
  5212.     AX = 4203h
  5213. Return: AX = 1234h if resident
  5214. SeeAlso: AX=3DFFh,AX=4243h
  5215. --------v-214243-----------------------------
  5216. INT 21 - VIRUS - "Invader" - INSTALLATION CHECK
  5217.     AX = 4243h
  5218. Return: AX = 5678h if resident
  5219. SeeAlso: AX=4203h,AX=4B04h
  5220. --------D-214300-----------------------------
  5221. INT 21 - DOS 2+ - GET FILE ATTRIBUTES
  5222.     AX = 4300h
  5223.     DS:DX -> ASCIZ filename
  5224. Return: CF clear if successful
  5225.         CX = file attributes (see #0643)
  5226.         AX = CX (DR-DOS 5.0)
  5227.     CF set on error
  5228.         AX = error code (01h,02h,03h,05h) (see #0885 at AH=59h)
  5229. Notes:    under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5230.     under DR-DOS 3.41 and 5.0, attempts to change the subdirectory bit are
  5231.       simply ignored without an error
  5232. BUG:    Windows for Workgroups returns error code 05h (access denied) instead
  5233.       of error code 02h (file not found) when attempting to get the
  5234.       attributes of a nonexistent file.  This causes open() with O_CREAT
  5235.       and fopen() with the "w" mode to fail in Borland C++.
  5236. SeeAlso: AX=4301h,AX=4310h,AH=71h,AH=B6h,INT 2F/AX=110Fh,INT 60/DI=0517h
  5237. --------D-214301-----------------------------
  5238. INT 21 - DOS 2+ - "CHMOD" - SET FILE ATTRIBUTES
  5239.     AX = 4301h
  5240.     CX = new file attributes (see #0643)
  5241.     DS:DX -> ASCIZ filename
  5242. Return: CF clear if successful
  5243.         AX destroyed
  5244.     CF set on error
  5245.         AX = error code (01h,02h,03h,05h) (see #0885 at AH=59h)
  5246. Notes:    will not change volume label or directory attribute bits, but will
  5247.       change the other attribute bits of a directory (the directory
  5248.       bit must be cleared to successfully change the other attributes of a
  5249.       directory, but the directory will not be changed to a normal file as
  5250.       a result)
  5251.     MS-DOS 4.01 reportedly closes the file if it is currently open
  5252.     for security reasons, the Novell NetWare execute-only bit can never
  5253.       be cleared; the file must be deleted and recreated
  5254.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  5255.     DOS 5.0 SHARE will close the file if it is currently open in sharing-
  5256.       compatibility mode, otherwise a sharing violation critical error is
  5257.       generated if the file is currently open
  5258. SeeAlso: AX=4300h,AX=4311h,AH=71h,INT 2F/AX=110Eh
  5259.  
  5260. Bitfields for file attributes:
  5261. Bit(s)    Description    (Table 0643)
  5262.  7    shareable (Novell NetWare)
  5263.  6    unused
  5264.  5    archive
  5265.  4    directory
  5266.  3    volume label
  5267.     execute-only (Novell NetWare)
  5268.  2    system
  5269.  1    hidden
  5270.  0    read-only
  5271. --------D-214302-----------------------------
  5272. INT 21 - DOS 7 (Chicago) - GET VOLUME INFORMATION
  5273.     AX = 4302h
  5274.     details not yet available
  5275. SeeAlso: AH=71h,AH=72h
  5276. --------O-214302-----------------------------
  5277. INT 21 - DR-DOS 3.41+ internal - GET ACCESS RIGHTS
  5278.     AX = 4302h
  5279.     DS:DX -> ASCIZ pathname
  5280. Return: CF clear if successful
  5281.         CX = access rights (see #0644)
  5282.         AX = CX (DR-DOS 5.0)
  5283.     CF set on error
  5284.         AX = error code
  5285. Desc:    Determine which operations the calling program may perform on a
  5286.       specified file without being required to provide a password.
  5287. Notes:    this protection scheme has been coordinated on all current Digital
  5288.       Research/Novell operating systems (DR-DOS 3.41+, DRMDOS 5.x, and
  5289.       FlexOS 2+)
  5290.     this function is documented in DR-DOS 6.0 and corresponds to the
  5291.       "Get/Set File Attributes" function, subfunction 2, documented in
  5292.       Concurrent DOS.
  5293.     only FlexOS actually uses the "execution" bits; DR-DOS 3.41+ treats
  5294.       them as "read" bits.
  5295.     DR-DOS 3.41-5.x only use bits 0-3.  Only DR-DOS 6.0 using a
  5296.       DRMDOS 5.x security system allowing for users and groups uses bits
  5297.       4-11.
  5298. SeeAlso: AX=4303h
  5299.  
  5300. Bitfields for DR-DOS file access rights:
  5301. Bit(s)    Description    (Table 0644)
  5302.  0    owner delete requires password
  5303.  1    owner execution requires password (FlexOS)
  5304.  2    owner write requires password
  5305.  3    owner read requires password
  5306.  4    group delete requires password
  5307.  5    group execution requires password (FlexOS)
  5308.  6    group write requires password
  5309.  7    group read requires password
  5310.  8    world delete requires password
  5311.  9    world execution requires password (FlexOS)
  5312.  10    world write requires password
  5313.  11    world read requires password
  5314. --------O-214303-----------------------------
  5315. INT 21 - DR-DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
  5316.     AX = 4303h
  5317.     CX = access rights
  5318.          bits 11-0: access rights (see #0644)
  5319.          bit 15: new password is to be set
  5320.     DS:DX -> ASCIZ pathname
  5321.     [DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
  5322. Return: CF clear if successful
  5323.     CF set on error
  5324.         AX = error code
  5325. Notes:    if the file is already protected, the old password must be added after
  5326.       the pathname, separated by a ";"
  5327.     this function is documented in DR-DOS 6.0 and corresponds to the
  5328.       "Get/Set File Attributes" function, subfunction 3, documented in
  5329.       Concurrent DOS.
  5330. SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR-DOS",AX=4305h,AX=4454h
  5331. --------O-214304-----------------------------
  5332. INT 21 U - DR-DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
  5333.     AX = 4304h
  5334.     DS:DX -> ASCIZ filename
  5335.     ???
  5336. Return: CF clear if successful
  5337.         CX = AX = 0000h if no password assigned to file
  5338.     CF set on error
  5339.         AX = error code (see #0885 at AH=59h)
  5340. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5341. SeeAlso: AX=4303h,AX=4305h
  5342. --------O-214305-----------------------------
  5343. INT 21 U - DR-DOS 5.0-6.0 internal - SET EXTENDED FILE ATTRIBUTES
  5344.     AX = 4305h
  5345.     DS:DX -> ASCIZ filename
  5346.     ???
  5347. Return: CF clear if successful
  5348.     CF set on error
  5349.         AX = error code (see #0885 at AH=59h)
  5350. Desc:    this function allows the extended attributes, and optionally the
  5351.       encrypted password, of a file to be set.
  5352. Note:    this function is only supported by DR-DOS 5.0 and 6.0 and DRMDOS 5.1
  5353. SeeAlso: AX=4304h,AX=4311h
  5354. --------O-214306-----------------------------
  5355. INT 21 - DR-DOS 6.0 - GET FILE OWNER
  5356.     AX = 4306h
  5357.     DS:DX -> ASCIZ filename
  5358. Return: CF clear if successful
  5359.         AX = CX = value set with AX=4307h
  5360.     CF set on error
  5361.         AX = error code (see #0885 at AH=59h)
  5362. SeeAlso: AX=4307h
  5363. --------O-214307-----------------------------
  5364. INT 21 - DR-DOS 6.0 - SET FILE OWNER
  5365.     AX = 4307h
  5366.     CX = ??? (owner identification number?)
  5367.     DS:DX -> ASCIZ filename
  5368. Return: CF clear if successful
  5369.     CF set on error
  5370.         AX = error code (see #0885 at AH=59h)
  5371. SeeAlso: AX=4306h
  5372. --------N-214310-----------------------------
  5373. INT 21 - Banyan VINES 2.1+ - GET EXTENDED FILE ATTRIBUTES
  5374.     AX = 4310h
  5375.     DS:DX -> ASCIZ filename
  5376. Return: CF clear if successful
  5377.         CH = attributes (see #0645)
  5378.     CF set on error
  5379.         AX = error code (01h,02h,03h,05h) (see #0885 at AH=59h)
  5380. Note:    the filename may be a directory but must be on a VINES file service
  5381. SeeAlso: AX=4300h,AX=4311h,AH=B6h,INT 2F/AX=110Fh
  5382. --------N-214311-----------------------------
  5383. INT 21 - Banyan VINES 2.1+ - SET EXTENDED FILE ATTRIBUTES
  5384.     AX = 4311h
  5385.     CH = new attributes (see #0645)
  5386.     DS:DX -> ASCIZ filename
  5387. Return: CF clear if successful
  5388.     CF set on error
  5389.         AX = error code (01h,02h,03h,05h) (see #0885 at AH=59h)
  5390. Note:    the filename may be a directory but must be on a VINES file service
  5391. SeeAlso: AX=4301h,AX=4305h,AX=4310h,INT 2F/AX=110Eh
  5392.  
  5393. Bitfields for VINES extended file attributes:
  5394. Bit(s)    Description    (Table 0645)
  5395.  7    unused
  5396.  6    shareable
  5397.  5    execute-only
  5398.  4-0    unused
  5399. --------O-214380-----------------------------
  5400. INT 21 - Novell DOS 7 - UNDELETE PENDING DELETE FILE
  5401.     AX = 4380h
  5402.     ???
  5403. Return: ???
  5404. SeeAlso: AH=41h,AX=4381h
  5405. --------O-214381-----------------------------
  5406. INT 21 - Novell DOS 7 - PURGE PENDING DELETE FILE
  5407.     AX = 4381h
  5408.     ???
  5409. Return: ???
  5410. SeeAlso: AH=41h,AX=4380h
  5411. --------D-214400-----------------------------
  5412. INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
  5413.     AX = 4400h
  5414.     BX = handle
  5415. Return: CF clear if successful
  5416.         DX = device information word (see #0646)
  5417.         AX destroyed
  5418.     CF set on error
  5419.         AX = error code (01h,05h,06h) (see #0885 at AH=59h)
  5420. Notes:    value in DH corresponds to high byte of device driver's attribute word
  5421.       if handle refers to a character device
  5422.     Novell NetWare reportedly does not return a drive number in bits 5-0
  5423.       for a disk file
  5424. SeeAlso: AX=4401h,INT 2F/AX=122Bh
  5425.  
  5426. Bitfields for device information word:
  5427. Bit(s)    Description    (Table 0646)
  5428.  character device
  5429.   14    device driver can process IOCTL requests (see AX=4402h)
  5430.   13    output until busy supported
  5431.   11    driver supports OPEN/CLOSE calls
  5432.    7    set (indicates device)
  5433.    6    EOF on input
  5434.    5    raw (binary) mode
  5435.    4    device is special (uses INT 29)
  5436.    3    clock device
  5437.    2    NUL device
  5438.    1    standard output
  5439.    0    standard input
  5440.  disk file
  5441.   15    file is remote (DOS 3+)
  5442.   14    don't set file date/time on closing (DOS 3+)
  5443.   11    media not removable
  5444.    8    (DOS 4 only) generate INT 24 if no disk space on write or read past
  5445.       end of file
  5446.    7    clear (indicates file)
  5447.    6    file has not been written
  5448.   5-0    drive number (0 = A:)
  5449. --------D-214401-----------------------------
  5450. INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
  5451.     AX = 4401h
  5452.     BX = handle (must refer to character device)
  5453.     DX = device information word (see #0646)
  5454.         (DH must be zero)
  5455. Return: CF clear if successful
  5456.     CF set on error
  5457.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  5458. SeeAlso: AX=4400h,INT 2F/AX=122Bh
  5459. --------D-214402-----------------------------
  5460. INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
  5461.     AX = 4402h
  5462.     BX = file handle referencing character device
  5463.     CX = number of bytes to read
  5464.     DS:DX -> buffer
  5465. Return: CF clear if successful
  5466.         AX = number of bytes actually read
  5467.     CF set on error
  5468.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  5469. Note:    format of data is driver-specific (see below for some specific cases)
  5470. SeeAlso: AX=4400h,AX=4403h,AX=4404h,INT 2F/AX=122Bh
  5471. --------N-214402-----------------------------
  5472. INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
  5473.     AX = 4402h
  5474.     BX = file handle for device "PROTMAN$"
  5475.     CX = 000Eh (size of request block)
  5476.     DS:DX -> request block (see #0647,#0648,#0649,#0650,#0651,#0655,#0656)
  5477. Return: CF clear if successful
  5478.         AX = number of bytes actually read
  5479.     CF set on error
  5480.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  5481. SeeAlso: AX=4402h"FTPSOFT"
  5482.  
  5483. Format of NDIS request block for GetProtocolManagerInfo:
  5484. Offset    Size    Description    (Table 0647)
  5485.  00h    WORD    01h
  5486.  02h    WORD    returned status (see #0657)
  5487.  04h    DWORD    returned pointer to structure representing parsed user config
  5488.  08h    DWORD    unused
  5489.  0Ch    WORD    returned BCD version of NDIS on which Protocol Manager is based
  5490. SeeAlso: #0648,#0649,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  5491.  
  5492. Format of NDIS request block for RegisterModule:
  5493. Offset    Size    Description    (Table 0648)
  5494.  00h    WORD    02h
  5495.  02h    WORD    returned status (see #0657)
  5496.  04h    DWORD    pointer to module's common characteristics table (see #0658)
  5497.  08h    DWORD    pointer to list of modules to which the module is to be bound
  5498.  0Ch    WORD    unused
  5499. SeeAlso: #0647,#0649,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  5500.  
  5501. Format of NDIS request block for BindAndStart:
  5502. Offset    Size    Description    (Table 0649)
  5503.  00h    WORD    03h
  5504.  02h    WORD    returned status (see #0657)
  5505.  04h    DWORD    caller's virtual address in FailingModules structure
  5506.  08h    DWORD    unused
  5507.  0Ch    WORD    unused
  5508. SeeAlso: #0647,#0648,#0650,#0651,#0652,#0653,#0654,#0655,#0656
  5509.  
  5510. Format of NDIS request block for GetProtocolManagerLinkage:
  5511. Offset    Size    Description    (Table 0650)
  5512.  00h    WORD    04h
  5513.  02h    WORD    returned status (see #0657)
  5514.  04h    DWORD    returned dispatch point
  5515.  08h    DWORD    unused
  5516.  0Ch    WORD    returned protocol manager DS
  5517. Note:    the dispatch point may be called as follows instead of using this IOCTL
  5518.     STACK: WORD  protocol manager DS
  5519.            DWORD pointer to request block
  5520.     Return: AX = returned status
  5521.         STACK popped
  5522. SeeAlso: #0647,#0648,#0649,#0651,#0652,#0653,#0654,#0655,#0656
  5523.  
  5524. Format of NDIS request block for GetProtocolIniPath:
  5525. Offset    Size    Description    (Table 0651)
  5526.  00h    WORD    05h
  5527.  02h    WORD    returned status (see #0657)
  5528.  04h    DWORD    pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
  5529.  08h    DWORD    unused
  5530.  0Ch    WORD    buffer length
  5531. SeeAlso: #0647,#0648,#0649,#0650,#0652,#0653,#0654,#0655,#0656
  5532.  
  5533. Format of NDIS request block for RegisterProtocolManagerInfo:
  5534. Offset    Size    Description    (Table 0652)
  5535.  00h    WORD    06h
  5536.  02h    WORD    returned status (see #0657)
  5537.  04h    DWORD    pointer to structure containing parsed user config file
  5538.  08h    DWORD    unused
  5539.  0Ch    WORD    length of structure
  5540. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0653,#0654,#0655,#0656
  5541.  
  5542. Format of NDIS request block for InitAndRegister:
  5543. Offset    Size    Description    (Table 0653)
  5544.  00h    WORD    07h
  5545.  02h    WORD    returned status (see #0657)
  5546.  04h    DWORD    unused
  5547.  08h    DWORD    poitner to ASCIZ name of the module to be prebind initialized
  5548.  0Ch    WORD    unused
  5549. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0654,#0655,#0656
  5550.  
  5551. Format of NDIS request block for UnbindAndStop:
  5552. Offset    Size    Description    (Table 0654)
  5553.  00h    WORD    08h
  5554.  02h    WORD    returned status (see #0657)
  5555.  04h    DWORD    failing modules as for BindAndStart
  5556.  08h    DWORD    if not 0000h:0000h, pointer to ASCIZ name of module to unbind
  5557.         if 0000h:0000h, terminate a set of previously dynamically
  5558.           bound protocol modules
  5559.  0Ch    WORD    unused
  5560. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0655,#0656
  5561.  
  5562. Format of NDIS request block for BindStatus:
  5563. Offset    Size    Description    (Table 0655)
  5564.  00h    WORD    09h
  5565.  02h    WORD    returned status (see #0657)
  5566.  04h    DWORD    must be 0000h:0000h
  5567.         on return, points to root tree
  5568.  08h    DWORD    0000h:0000h
  5569.  0Ch    WORD    unused under DOS
  5570. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0654,#0656
  5571.  
  5572. Format of NDIS request block for RegisterStatus:
  5573. Offset    Size    Description    (Table 0656)
  5574.  00h    WORD    0Ah
  5575.  02h    WORD    returned status (0000h, 0008h, 002Ch) (see #0657)
  5576.  04h    DWORD    0000h:0000h
  5577.  08h    DWORD    pointer to 16-byte ASCIZ module name
  5578.  0Ch    WORD    0000h
  5579. Note:    not supported by the 10NET v5.0 PROTMAN$ driver
  5580. SeeAlso: #0647,#0648,#0649,#0650,#0651,#0652,#0653,#0654,#0655
  5581.  
  5582. (Table 0657)
  5583. Values for NDIS status code:
  5584.  0000h    success
  5585.  0001h    wait for release--protocol has retained control of the data buffer
  5586.  0002h    request queued
  5587.  0003h    frame not recognized
  5588.  0004h    frame rejected
  5589.  0005h    frame should be forwarded
  5590.  0006h    out of resource
  5591.  0007h    invalid parameter
  5592.  0008h    invalid function
  5593.  0009h    not supported
  5594.  000Ah    hardware error
  5595.  000Bh    transmit error
  5596.  000Ch    unrecognized destination
  5597.  000Dh    buffer too small
  5598.  0020h    already started
  5599.  0021h    binding incomplete
  5600.  0022h    driver not initialized
  5601.  0023h    hardware not found
  5602.  0024h    hardware failure
  5603.  0025h    configuration failure
  5604.  0026h    interrupt conflict
  5605.  0027h    MAC incompatible
  5606.  0028h    initialization failed
  5607.  0029h    no binding
  5608.  002Ah    network may be disconnected
  5609.  002Bh    incompatible OS version
  5610.  002Ch    already registered
  5611.  002Dh    path not found
  5612.  002Eh    insufficient memory
  5613.  002Fh    info not found
  5614.  00FFh    general failure
  5615.  F000h-FFFFh reserved for vendor-specific codes, treated as general failure
  5616.  
  5617. Format of NDIS common characteristics table:
  5618. Offset    Size    Description    (Table 0658)
  5619.  00h    WORD    size of table in bytes
  5620.  02h    BYTE    NDIS major version
  5621.  03h    BYTE    NDIS minor version
  5622.  04h    WORD    reserved
  5623.  06h    BYTE    module major version
  5624.  07h    BYTE    module minor version
  5625.  08h    DWORD    module function flag bits
  5626.         bit 0: binding at upper boundary supported
  5627.         bit 1: binding at lower boundary supported
  5628.         bit 2: dynamically bound
  5629.         bits 3-31 reserved, must be 0
  5630.  0Ch 16 BYTEs    ASCIZ module name
  5631.  1Ch    BYTE    upper boundary protocol level (see #0659)
  5632.  1Dh    BYTE    upper boundary interface type
  5633.         for MACs: 1 = MAC
  5634.         for data links and transports: to be defined
  5635.         for session: 1 = NCB
  5636.         any level: 0 = private (ISV-defined)
  5637.  1Eh    BYTE    lower boundary protocol level (see #0659)
  5638.  1Fh    BYTE    lower boundary interface type
  5639.         same as offset 1Dh
  5640.  20h    WORD    module ID filled in by protocol manager
  5641.  22h    WORD    module DS
  5642.  24h    DWORD    system request entry point
  5643.  28h    DWORD    pointer to service-specific characteristics (see #0661,#0663)
  5644.         0000h:0000h if none
  5645.  2Ch    DWORD    pointer to service-specific status, or 0000h:0000h if none
  5646.           (see #0664)
  5647.  30h    DWORD    pointer to upper dispatch table (see #0660)
  5648.         0000h:0000h if none
  5649.  34h    DWORD    pointer to lower dispatch table (see #0660)
  5650.         0000h:0000h if none
  5651.  38h  2 DWORDs    reserved, must be 0
  5652. Note:    for compatibility with NDIS 1.x.x, a major version of 00h is
  5653.       interpreted as 01h
  5654.  
  5655. (Table 0659)
  5656. Values for NDIS boundary protocol level:
  5657.  00h    physical
  5658.  01h    Media Access Control
  5659.  02h    Data link
  5660.  03h    network
  5661.  04h    transport
  5662.  05h    session
  5663.  FFh    not specified
  5664.  
  5665. Format of NDIS dispatch table:
  5666. Offset    Size    Description    (Table 0660)
  5667.  00h    DWORD    -> common characteristics table (see #0658)
  5668.  04h  4 BYTEs    ???
  5669.  08h    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  5670.  0Ch    DWORD    -> ??? function (called with 10 bytes of stack arguments)
  5671.  10h    DWORD    -> ??? function (called with 16 bytes of stack arguments)
  5672.  14h    DWORD    -> ??? function (called with 4 bytes of stack arguments)
  5673.  18h    DWORD    -> ??? function (called with 18 bytes of stack arguments)
  5674.  1Ch    DWORD    -> ??? function (called with 12 bytes of stack arguments)
  5675.  
  5676. Format of MAC Service-Specific Characteristics Table:
  5677. Offset    Size    Description    (Table 0661)
  5678.  00h    WORD    length of table in bytes
  5679.  02h 16 BYTEs    ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
  5680.           "DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
  5681.           "HDLC", or "ISDN"
  5682.  12h    WORD    length of station addresses in bytes
  5683.  14h 16 BYTEs    permanent station address
  5684.  24h 16 BYTEs    current station address
  5685.  34h    DWORD    current functional adapter address (00000000h if none)
  5686.  38h    DWORD    pointer to multicast address list
  5687.  3Ch    DWORD    link speed in bits/sec
  5688.  40h    DWORD    service flags (see #0662)
  5689.  44h    WORD    maximum frame size which may be both sent and received
  5690.  46h    DWORD    total transmit buffer capacity in bytes
  5691.  4Ah    WORD    transmit buffer allocation block size in bytes
  5692.  4Ch    DWORD    total receive buffer capacity in bytes
  5693.  50h    WORD    receive buffer allocation block size in bytes
  5694.  52h  3 BYTEs    IEEE vendor code
  5695.  55h    BYTE    vendor adapter code
  5696.  56h    DWORD    pointer to ASCIZ vendor adapter description
  5697.  5Ah    WORD    IRQ used by adapter
  5698.  5Ch    WORD    transmit queue depth
  5699.  5Eh    WORD    maximum supported number of data blocks in buffer descriptors
  5700.  60h  N BYTEs    vendor-specific info
  5701. SeeAlso: #0663
  5702.  
  5703. Bitfields for service flags:
  5704. Bit(s)    Description    (Table 0662)
  5705.  0    supports broadcast
  5706.  1    supports multicast
  5707.  2    supports functional/group addressing
  5708.  3    supports promiscuous mode
  5709.  4    station address software settable
  5710.  5    statistics always current
  5711.  6    supports InitiateDiagnostics
  5712.  7    supports loopback
  5713.  8    MAC does primarily ReceiveChain indications instead of ReceiveLookahead
  5714.     indications
  5715.  9    supports IBM source routing
  5716.  10    supports MAC reset
  5717.  11    supports Open/Close adapter
  5718.  12    supports interrupt request
  5719.  13    supports source routing bridge
  5720.  14    supports GDT virtual addresses (OS/2 version)
  5721.  15    multiple TransferDatas allowed durign a single indication
  5722.  16    MAC normally sets FrameSize = 0 in ReceiveLookahead
  5723.  17-31    reserved, must be 0
  5724.  
  5725. Format of NetBIOS Service-Specific Characteristics Table:
  5726. Offset    Size    Description    (Table 0663)
  5727.  00h    WORD    length of table in bytes
  5728.  02h 16 BYTEs    ASCIZ type name of NetBIOS module
  5729.  12h    WORD    NetBIOS module code
  5730.  14h  N BYTEs    vendor-specific info
  5731. SeeAlso: #0661
  5732.  
  5733. Format of MAC Service-Specific Status Table:
  5734. Offset    Size    Description    (Table 0664)
  5735.  00h    WORD    length of table in bytes
  5736.  02h    DWORD    seconds since 0:00 1/1/70 when diagnostics last run
  5737.         (FFFFFFFFh = never)
  5738.  06h    DWORD    MAC status bits (see #0665)
  5739.  0Ah    WORD    current packet filter flags (see #0666)
  5740.  0Ch    DWORD    pointer to media-specific status table or 0000h:0000h
  5741.  10h    DWORD    seconds past 0:00 1/1/70 of last ClearStatistics
  5742.  14h    DWORD    total frames received (FFFFFFFFh = not counted)
  5743.  18h    DWORD    frames with CRC error (FFFFFFFFh = not counted)
  5744.  1Ch    DWORD    total bytes received (FFFFFFFFh = not counted)
  5745.  20h    DWORD    frames discarded--no buffer space (FFFFFFFFh = not counted)
  5746.  24h    DWORD    multicast frames received (FFFFFFFFh = not counted)
  5747.  28h    DWORD    broadcast frames received (FFFFFFFFh = not counted)
  5748.  2Ch    DWORD    frames with errors (FFFFFFFFh = not counted)
  5749.  30h    DWORD    overly large frames (FFFFFFFFh = not counted)
  5750.  34h    DWORD    frames less than minimum size (FFFFFFFFh = not counted)
  5751.  38h    DWORD    multicast bytes received (FFFFFFFFh = not counted)
  5752.  3Ch    DWORD    broadcast bytes received (FFFFFFFFh = not counted)
  5753.  40h    DWORD    frames discarded--hardware error (FFFFFFFFh = not counted)
  5754.  44h    DWORD    total frames transmitted (FFFFFFFFh = not counted)
  5755.  48h    DWORD    total bytes transmitted (FFFFFFFFh = not counted)
  5756.  4Ch    DWORD    multicast frames transmitted (FFFFFFFFh = not counted)
  5757.  50h    DWORD    broadcast frames transmitted (FFFFFFFFh = not counted)
  5758.  54h    DWORD    broadcast bytes transmitted (FFFFFFFFh = not counted)
  5759.  58h    DWORD    multicast bytes transmitted (FFFFFFFFh = not counted)
  5760.  5Ch    DWORD    frames not transmitted--timeout (FFFFFFFFh = not counted)
  5761.  60h    DWORD    frames not transmitted--hardware error (FFFFFFFFh = not countd)
  5762.  64h  N BYTEs    vendor-specific info
  5763.  
  5764. Bitfields for MAC status bits:
  5765. Bit(s)    Description    (Table 0665)
  5766.  0-2    operational status
  5767.     000 hardware not installed
  5768.     001 hardware failed startup diagnostics
  5769.     010 hardware configuration problem
  5770.     011 hardware fault
  5771.     100 operating marginally due to soft faults
  5772.     101 reserved
  5773.     110 reserved
  5774.     111 hardware fully operational
  5775.  3    MAC bound
  5776.  4    MAC open
  5777.  5    diagnostics in progress
  5778.  6-31    reserved
  5779.  
  5780. Bitfields for packet filter flags:
  5781. Bit(s)    Description    (Table 0666)
  5782.  0    directed/multicast or group/functional
  5783.  1    broadcast
  5784.  2    promiscuous
  5785.  3    all source routing
  5786.  4-15    reserved, must be zero
  5787. --------I-214402-----------------------------
  5788. INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
  5789.     AX = 4402h
  5790.     BX = handle for character device "GDMS"
  5791.     CX = number of bytes to read (>= 4)
  5792.     DS:DX -> buffer (see #0667)
  5793. Return: CF set on error
  5794.         AX = error code (see #0885 at AH=59h)
  5795.     CF clear if successful
  5796.         AX = number of bytes read
  5797.  
  5798. Format of System 36/38 emulator returned data:
  5799. Offset    Size    Description    (Table 0667)
  5800.  00h  4 BYTEs    ???
  5801.  04h    DWORD    pointer to ???
  5802.  08h  4 BYTEs    ???
  5803. --------m-214402-----------------------------
  5804. INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
  5805.     AX = 4402h
  5806.     BX = handle for device "LA$TBYTE"
  5807.     CX = 0004h
  5808.     DS:DX -> DWORD to hold address of 39-byte table of ???
  5809. Return: CF set on error
  5810.         AX = error code (see #0885 at AH=59h)
  5811.     CF clear if successful
  5812.         AX = number of bytes read
  5813. Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
  5814.       management package by Key Software Products
  5815. SeeAlso: AX=4402h"HIGHUMM"
  5816. --------m-214402-----------------------------
  5817. INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
  5818.     AX = 4402h
  5819.     BX = handle for device "KSP$UMM"
  5820.     CX = 0004h
  5821.     DS:DX -> DWORD to hold entry point (see #0668)
  5822. Return: CF set on error
  5823.         AX = error code (see #0885 at AH=59h)
  5824.     CF clear if successful
  5825.         AX = number of bytes read
  5826. Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory management
  5827.       package by Key Software Products
  5828. SeeAlso: AX=4402h"LASTBYTE"
  5829.  
  5830. (Table 0668)
  5831. Call HIGHUMM.SYS entry point with:
  5832.     AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
  5833.         DX = size in paragraphs
  5834.         Return: BX = segment number (if successful)
  5835.             DX = size of requested block/size of largest block
  5836.     AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
  5837.         DX = segment number of UMB
  5838.     AH = 02h request a bank-switched memory block
  5839.         DX = size in paragraphs
  5840.         Return: BX = segment number (if successful)
  5841.             DX = size of requested block/size of largest block
  5842.     AH = 03h release a bank-switched memory block
  5843.         DX = segment number
  5844.     AH = 04h transfer data to/from high memory
  5845.         DS:SI -> source
  5846.         ES:DI -> destination
  5847.         CX = length in bytes
  5848.         Note: enables bank-switched memory, does the copy, then disables
  5849.         bank-switched memory
  5850.     AH = 05h get a word from bank-switched memory
  5851.         ES:DI -> word to read
  5852.         Return: DX = word
  5853.     AH = 06h put a word to bank-switched memory
  5854.         ES:DI -> word to write
  5855.         DX = word
  5856.     AH = 07h put a byte to bank-switched memory
  5857.         ES:DI -> byte to write
  5858.         DL = byte
  5859.     AH = 08h enable bank-switched memory
  5860.         DS:SI -> 6-byte status save area
  5861.     AH = 09h disable bank-switched memory
  5862.         DS:SI -> 6-byte save area from enable call (AH=08h)
  5863.     AH = 0Ah assign name to UMB or high bank-switched block
  5864.         DX = segment number
  5865.         DS:SI -> 8-byte blank-padded name
  5866.     AH = 0Bh locate UMB block by name
  5867.         DS:SI -> 8-byte blank-padded name
  5868.         Return: BX = segment number (if successful)
  5869.             DX = size of block
  5870.     AH = 0Ch locate bank-switched block by name
  5871.         DS:SI -> 8-byte blank-padded name
  5872.         Return: BX = segment number (if successful)
  5873.             DX = size of block
  5874. Return: AX = status code
  5875.         0001h successful
  5876.         0000h failed
  5877.         BL = error code
  5878.             80h not implemented
  5879.             B0h insufficient memory, smaller block available
  5880.             B1h insufficient memory, no blocks available
  5881.             B2h invalid segment number
  5882. Note:    only functions 00h and 01h are always available; the remaining
  5883.       functions are only enabled if the proper commandline switch is given
  5884. --------c-214402-----------------------------
  5885. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
  5886.     AX = 4402h
  5887.     BX = file handle for device "SMARTAAR"
  5888.     CX = number of bytes to read (min 28h)
  5889.     DS:DX -> buffer for status record (see #0669)
  5890. Return: CF clear if successful
  5891.         AX = number of bytes actually read
  5892.     CF set on error
  5893.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  5894. SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  5895.  
  5896. Format of SMARTDRV status record:
  5897. Offset    Size    Description    (Table 0669)
  5898.  00h    BYTE    write-through flag (always 01h)
  5899.  01h    BYTE    writes should be buffered (always 00h)
  5900.  02h    BYTE    cache enabled if 01h
  5901.  03h    BYTE    driver type (01h extended memory, 02h expanded)
  5902.  04h    WORD    clock ticks between cache flushes (currently unused)
  5903.  06h    BYTE    cache contains locked tracks if nonzero
  5904.  07h    BYTE    flush cache on INT 19 reboot if nonzero
  5905.  08h    BYTE    cache full track writes if nonzero
  5906.  09h    BYTE    double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
  5907.  0Ah    DWORD    original INT 13 vector
  5908.  0Eh    BYTE    minor version number
  5909.  0Fh    BYTE    major version number
  5910.  10h    WORD    unused
  5911.  12h    WORD    sectors read            \
  5912.  14h    WORD    sectors already in cache     > may be scaled rather than
  5913.  16h    WORD    sectors already in track buffer /  absolute counts
  5914.  18h    BYTE    cache hit rate in percent
  5915.  19h    BYTE    track buffer hit rate in percent
  5916.  1Ah    WORD    total tracks in cache
  5917.  1Ch    WORD    number of tracks in use
  5918.  1Eh    WORD    number of locked tracks
  5919.  20h    WORD    number of dirty tracks
  5920.  22h    WORD    current cache size in 16K pages
  5921.  24h    WORD    original (maximum) cache size in 16K pages
  5922.  26h    WORD    minimum cache size in 16K pages
  5923.  28h    DWORD    pointer to byte flag to increment for locking cache contents
  5924. --------d-214402-----------------------------
  5925. INT 21 - CD-ROM device driver - IOCTL INPUT
  5926.     AX = 4402h
  5927.     BX = file handle referencing character device for CD-ROM driver
  5928.     CX = number of bytes to read
  5929.     DS:DX -> control block (see #0671)
  5930. Return: CF clear if successful
  5931.         AX = number of bytes actually read
  5932.     CF set on error
  5933.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  5934. Note:    the data returned depends on the first byte of the control block; the
  5935.       remainder of the control block is filled by the driver
  5936. SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h
  5937.  
  5938. (Table 0670)
  5939. Values for CD-ROM data being requested:
  5940.  00h    device driver header address
  5941.  01h    drive head location
  5942.  02h    reserved
  5943.  03h    error statistics
  5944.  04h    audio channel info
  5945.  05h    raw drive bytes (uninterpreted and device-specific)
  5946.  06h    device status
  5947.  07h    sector size
  5948.  08h    volume size
  5949.  09h    media change status
  5950.  0Ah    audio disk info
  5951.  0Bh    audio track info
  5952.  0Ch    audio Q-Channel info
  5953.  0Dh    audio sub-channel info
  5954.  0Eh    UPC code
  5955.  0Fh    audio status info
  5956.  
  5957. Format of CD-ROM control block:
  5958. Offset    Size    Description    (Table 0671)
  5959.  00h    BYTE    data being requested (see #0670)
  5960. ---function 00h---
  5961.  01h    DWORD    device driver header address (see also AH=52h)
  5962. ---function 01h---
  5963.  01h    BYTE    addressing mode
  5964.         00h HSG
  5965.         01h Red Book
  5966.  02h    DWORD    current location of drive's head
  5967.         logical sector number in HSG mode
  5968.         frame/second/minute/unused in Red Book mode
  5969.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  5970. ---function 03h---
  5971.  01h  N BYTEs    undefined as of 5 Aug 88 specification
  5972. ---function 04h---
  5973.  01h    BYTE    input channel (0-3) for output channel 0
  5974.  02h    BYTE    volume for output channel 0
  5975.  03h    BYTE    input channel (0-3) for output channel 1
  5976.  04h    BYTE    volume for output channel 1
  5977.  05h    BYTE    input channel (0-3) for output channel 2
  5978.  06h    BYTE    volume for output channel 2
  5979.  07h    BYTE    input channel (0-3) for output channel 3
  5980.  08h    BYTE    volume for output channel 3
  5981. Notes:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  5982.       right prime; a volume of 00h is off
  5983.     the default setting is for each input channel to be assigned to the
  5984.       same-numbered output channel at full (FFh) volume
  5985. ---function 05h---
  5986.  01h    BYTE    number of bytes read
  5987.  02h 128 BYTEs    buffer for drive bytes
  5988. ---function 06h---
  5989.  01h    DWORD    device parameters (see #0672)
  5990. ---function 07h---
  5991.  01h    BYTE    read mode
  5992.         00h cooked
  5993.         01h raw
  5994.  02h    WORD    sector size in bytes
  5995. ---function 08h---
  5996.  01h    DWORD    volume size in sectors
  5997. ---function 09h---
  5998.  01h    BYTE    media change status
  5999.         00h don't know
  6000.         01h media unchanged
  6001.         FFh media has been changed
  6002. ---function 0Ah---
  6003.  01h    BYTE    lowest audio track number
  6004.  02h    BYTE    highest audio track number
  6005.  03h    DWORD    start address of lead-out track (Red Book format)
  6006. --function 0Bh---
  6007.  01h    BYTE    track number (set by caller)
  6008.  02h    DWORD    starting point of track (Red Book format)
  6009.  06h    BYTE    track control info
  6010.         bits 15,14,12: track type (notice: bits not contiguous!)
  6011.             000 two audio channels, no pre-emphasis
  6012.             001 two audio channels with pre-emphasis
  6013.             010 data track
  6014.             100 four audio channels, no pre-emphasis
  6015.             101 four audio channels with pre-emphasis
  6016.             other reserved
  6017.         bit 13: digital copy permitted
  6018. ---function 0Ch---
  6019.  01h    BYTE    CONTROL and ADR byte (as received from drive)
  6020.  02h    BYTE    track number
  6021.  03h    BYTE    point or index
  6022.  04h    BYTE    minute    \
  6023.  05h    BYTE    second     > running time within track
  6024.  06h    BYTE    frame    /
  6025.  07h    BYTE    zero
  6026.  08h    BYTE    "AMIN" or "PMIN"     \
  6027.  09h    BYTE    "ASEC" or "PSEC"      > running time on disk
  6028.  0Ah    BYTE    "AFRAME" or "PFRAME" /
  6029. ---function 0Dh---
  6030.  01h    DWORD    starting frame address (Red Book format)
  6031.  05h    DWORD    transfer address
  6032.  09h    DWORD    number of sectors to read
  6033. Note:    copies 96 bytes of sub-channel info per sector into buffer
  6034. ---function 0Eh---
  6035.  01h    BYTE    CONTROL and ADR byte
  6036.  02h  7 BYTEs    UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
  6037.  09h    BYTE    zero
  6038.  0Ah    BYTE    "AFRAME"
  6039. ---function 0Fh---
  6040.  ??? documentation not yet available
  6041.  01h    WORD    pause status (0000h not paused, 0001h paused)
  6042.  03h    DWORD    audio play start address
  6043.  07h    DWORD    ??? audio play length or end address
  6044.  
  6045. Bitfields for CD-ROM device parameters:
  6046. Bit(s)    Description    (Table 0672)
  6047.  0    door open
  6048.  1    door unlocked
  6049.  2    supports raw reading in addition to cooked
  6050.  3    writable
  6051.  4    can play audio/video tracks
  6052.  5    supports interleaving
  6053.  6    reserved
  6054.  7    supports prefetch requests
  6055.  8    supports audio channel control
  6056.  9    supports Red Book addressing in addition to HSG
  6057.  10    audio is playing
  6058.  11    no disk in drive
  6059.  12    supports R-W subchannels
  6060. --------m-214402-----------------------------
  6061. INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
  6062.     AX = 4402h
  6063.     BX = file handle for device "QEMM386$"
  6064.     CX = 0004h
  6065.     DS:DX -> DWORD buffer for API entry point
  6066. Return: CF clear if successful
  6067.         buffer filled (see INT 67/AH=3Fh for entry point parameters)
  6068.     CF set on error
  6069.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6070. Note:    Quarterdeck recently (June 1993) documented this function, but the
  6071.       documentation incorrectly states that it is only available for
  6072.       QEMM 6+
  6073. SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
  6074. --------Q-214402-----------------------------
  6075. INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
  6076.     AX = 4402h
  6077.     BX = file handle for device "HOOKROM$"
  6078.     CX = 0004h
  6079.     DS:DX -> DWORD buffer for address of hooked vector table (see #0673)
  6080. Return: CF clear if successful
  6081.         DS:DX buffer filled
  6082.     CF set on error
  6083.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6084. SeeAlso: AX=4402h/SF=01h
  6085.  
  6086. Format of HOOKROM.SYS hooked vector table entry:
  6087. Offset    Size    Description    (Table 0673)
  6088.  00h  5 BYTEs    FAR jump to actual interrupt handler
  6089.         (end of table if first byte is not EAh)
  6090.  05h    BYTE    interrupt vector number
  6091. --------d-214402-----------------------------
  6092. INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
  6093.     AX = 4402h
  6094.     BX = file handle for device "SCSIMGR$"
  6095.     CX = 0004h or 0005h (see notes)
  6096.     DS:DX -> buffer for result (see #0674), set to zeros before call
  6097. Return: CF clear if successful
  6098.         AX = 0004h or 0005h (see notes)
  6099.     CF set on error
  6100.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6101. Note:    the variant of the call requesting five bytes is an UNDOCUMENTED
  6102.       extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
  6103.       ASPI7DOS.SYS; if made of a host manager which does not support the
  6104.       variant, only four bytes will be returned.  If the variant is
  6105.       supported, Adaptec's WINASPI.DLL assumes that the host manager is
  6106.       an "advanced" one which operates in either real or protected mode
  6107.       (and thus does not require a DPMI INT 31/AX=0301h call to be invoked
  6108.       from protected mode).     Support of the five-byte variant also appears
  6109.       to imply that an advanced ASPI host manager uses no temporary
  6110.       storage space except the SRB (see #0676) and the stack, and that it
  6111.       is fully reentrant.
  6112.     if called with a standard request for four bytes, even Adaptec's
  6113.       advanced drivers return only the requested four bytes containing the
  6114.       ASPI entry point address
  6115.     the function address is called with the address of a SCSI Request
  6116.       Block (see #0676) on the stack and the caller must clean up the
  6117.       stack
  6118. SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
  6119.  
  6120. Format of ASPI IOCTL result:
  6121. Offset    Size    Description    (Table 0674)
  6122.  00h    DWORD    function address
  6123.  04h    BYTE    number of SCSI host adapters supported by host manager
  6124.  
  6125. (Table 0675)
  6126. Values for ASPI request number:
  6127.  00h    "HA_INQ"    host adapter inquiry
  6128.  01h    "GET_TYPE"    get device type
  6129.  02h    "EXEC_SIO"    execute SCSI I/O
  6130.  03h    "ABORT_SRB"    abort SRB
  6131.  04h    "RESET_DEV"    reset SCSI device
  6132.  05h    "SET_HAPRMS"    set host adapter parameters
  6133.  06h    get disk drive information
  6134.  
  6135. Format of SCSI Request Block (64 bytes):
  6136. Offset    Size    Description    (Table 0676)
  6137.  00h    BYTE    request number (see #0675)
  6138.  01h    BYTE    request status (see #0677)
  6139.  02h    BYTE    host adapter ID
  6140.  03h    BYTE    request flags (see #0678)
  6141.  04h    DWORD    reserved
  6142. ---request 00h---
  6143.  08h    BYTE    (ret) number of host adapters
  6144.  09h    BYTE    (ret) target adapter ID
  6145.  0Ah 16 BYTEs    (ret) SCSI manager ID
  6146.  1Ah 16 BYTEs    (ret) host adapter ID
  6147.  2Ah 16 BYTEs    (ret) host adapter-unique parameters
  6148. ---request 01h---
  6149.  08h    BYTE    target ID
  6150.  09h    BYTE    logical unit number
  6151.  0Ah    BYTE    (ret) device type (see #0681)
  6152. ---request 02h---
  6153.  08h    BYTE    target ID
  6154.  09h    BYTE    logical unit number
  6155.  0Ah    DWORD    data allocation length
  6156.  0Eh    BYTE    sense allocation length
  6157.  0Fh    DWORD    data buffer pointer
  6158.  13h    DWORD    next request pointer (for linking)
  6159.  17h    BYTE    CDB length
  6160.  18h    BYTE    (ret) host adapter status (see #0676)
  6161.  19h    BYTE    (ret) target status (see #0680)
  6162.  1Ah    DWORD    post routine address
  6163.  1Eh    WORD    real mode Post DS
  6164.  20h    DWORD    SRB pointer
  6165.  24h    WORD    reserved
  6166.  26h    DWORD    SRB physical address
  6167.  2Ah 22 BYTEs    SCSIMGR$ workspace
  6168.  40h  N BYTEs    CCB, including sense data (20-24 bytes)
  6169. ---request 03h---
  6170.  08h    DWORD    address of SRB to abort
  6171. ---request 04h---
  6172.  08h    BYTE    target ID
  6173.  09h    BYTE    logical unit number
  6174.  0Ah 14 BYTEs    reserved
  6175.  18h    BYTE    (ret) host adapter status (see #0679)
  6176.  19h    BYTE    (ret) target status (see #0680)
  6177.  1Ah    DWORD    post routine address
  6178.  1Eh 34 BYTEs    workspace
  6179. ---request 05h---
  6180.  08h 16 BYTEs    host adapter-unique parameters
  6181. ---request 06h---
  6182.  08h    BYTE    target ID
  6183.  09h    BYTE    logical unit number
  6184.  0Ah    BYTE    disk drive flags (see #0682)
  6185.  0Bh    BYTE    INT 13h drive number
  6186.  0Ch    BYTE    preferred head number translation
  6187.  0Dh    BYTE    preferred sector size translation
  6188.  0Eh 10 BYTEs    reserved
  6189. SeeAlso: #0683
  6190.  
  6191. (Table 0677)
  6192. Values for ASPI request status:
  6193.  00h    not done yet
  6194.  01h    completed successfully
  6195.  02h    aborted by host
  6196.  04h    SCSI I/O error
  6197.  80h    invalid
  6198.  81h    no adapter
  6199.  82h    no device attached
  6200.  else    status
  6201.  
  6202. Bitfields for ASPI request flags:
  6203. Bit(s)    Description    (Table 0678)
  6204.  0    posting enabled
  6205.  1    linking enabled
  6206.  2    direction
  6207.  3    transfer from SCSI target to host
  6208.  4    transfer from host to SCSI target
  6209. Note:    no data is transferred if both bits 3 and 4 are set
  6210.  
  6211. (Table 0679)
  6212. Values for host adapter status:
  6213.  00h    no error detected
  6214.  11h    select timeout
  6215.  12h    data overrun
  6216.  13h    bus error
  6217.  14h    bus failure
  6218.  
  6219. (Table 0680)
  6220. Values for target status:
  6221.  00h    no status
  6222.  02h    sense data stored in SRB
  6223.  08h    target busy
  6224.  18h    reservation error
  6225.  
  6226. (Table 0681)
  6227. Values for device type:
  6228.  00h    disk drive
  6229.  01h    tape drive (streamer)
  6230.  02h    printer
  6231.  03h    processor
  6232.  04h    WORM drive
  6233.  05h    CD-ROM drive
  6234.  06h    scanner
  6235.  07h    optical drive
  6236.  08h    autochanger
  6237.  09h    communications device
  6238.  
  6239. (Table 0682)
  6240. Values for disk drive flags:
  6241.  00h    no INT 13 access
  6242.  01h    INT 13 with DOS access
  6243.  02h    INT 13 without DOS access
  6244.  03h    invalid flags
  6245.  
  6246. Format of CCB:
  6247. Offset    Size    Description    (Table 0683)
  6248.  00h    BYTE    command code (see #0684)
  6249.  01h    BYTE    flags
  6250.         bits 4-0: vary by function
  6251.         bits 7-5: logical unit number
  6252.  02h    BYTE    "adr_1"
  6253.  03h    BYTE    "adr_0"
  6254.  04h    BYTE    length
  6255.  05h    BYTE    control
  6256.     ...
  6257.  06h/0Ah 14 BYTEs buffer for sense data (see #0685)
  6258. SeeAlso: #0676
  6259.  
  6260. (Table 0684)
  6261. Values for CCB command code:
  6262.  00h    test unit ready
  6263.  01h    rewind
  6264.  03h    request sense data
  6265.  05h    get block size limits
  6266.  08h    Group 0 read
  6267.  0Ah    Group 0 write
  6268.  10h    write file marks
  6269.  11h    SCSI Space (set position?)
  6270.  12h    SCSI Inquire
  6271.  15h    set mode information
  6272.  16h    reserve SCSI device
  6273.  17h    release SCSI device
  6274.  19h    erase
  6275.  1Ah    request mode information
  6276.  1Bh    load/unload media
  6277.  1Dh    request target self-check
  6278.  24h    set window parameters
  6279.  25h    get window parameters
  6280.  28h    Group 1 read
  6281.  2Ah    Group 1 write
  6282.  31h    document feeder control
  6283.  34h    get scan data status
  6284. ---vendor-specific commands---
  6285.  D3h    get document feeder status
  6286.  D4h    set document feeder mode
  6287.  
  6288. Format of sense data:
  6289. Offset    Size    Description    (Table 0685)
  6290.  00h    BYTE    error code (bit 7 set if valid)
  6291.  01h    BYTE    segment number
  6292.  02h    BYTE    sense key
  6293.         bit 6: EOM
  6294.         bit 5: ILI
  6295.         bits 0-3: sense key (see #0686)
  6296.  03h  4 BYTEs    information bytes
  6297.  07h    BYTE    additional sense length (0Ah)
  6298.  08h  4 BYTEs    command-specific information
  6299.  0Ch    BYTE    additional sense code
  6300.  0Dh    BYTE    additional sense code qualifier
  6301.  0Eh    BYTE    field replaceable unit code
  6302.  0Fh  3 BYTEs    sense key specific bytes
  6303.  
  6304. (Table 0686)
  6305. Values for sense key:
  6306.  00h    no sense data
  6307.  02h    SCSI unit not ready
  6308.  03h    media error
  6309.  04h    unrecoverable hardware error
  6310.  05h    illegal parameter in CDB
  6311.  06h    target has been reset
  6312.  0Bh    target aborted command
  6313. --------m-214402-----------------------------
  6314. INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
  6315.     AX = 4402h
  6316.     BX = file handle for device "386MAX$$"
  6317.     CX = number of bytes to read
  6318.     DS:DX -> BYTE 03h followed by 386MAX state buffer (see #0687)
  6319. Return: CF clear if successful
  6320.         buffer at DS:DX+1 filled
  6321.         AX = number of bytes actually copied
  6322.     CF set on error
  6323.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6324. Notes:    if the value given in CX is less than the size of the state record
  6325.       (5Ah for v6.01, 66h for v7.00), only a partial state record will be
  6326.       returned
  6327.     the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
  6328.       did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
  6329.       56h bytes for v5.11.
  6330.     to invoke 386MAX API functions, push DX onto the stack, load DX with
  6331.       the word at offset 25h in the returned state, load all other
  6332.       registers as needed for the desired function, and execute an
  6333.       OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
  6334.       if it is not otherwise modified by the API function.    For safety,
  6335.       in case a function is not supported or 386MAX is not present, SP
  6336.       should be saved and restored around the API call.
  6337.     Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
  6338.       use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
  6339.       make some calls incorrectly
  6340. SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
  6341.  
  6342. Format of 386MAX v6.01+ state:
  6343. Offset    Size    Description    (Table 0687)
  6344.  -1    BYTE    (call) 03h
  6345.  00h  6 BYTEs    signature "386MAX"
  6346.  06h  4 BYTEs    version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01)
  6347.         (';' by default; apparently changed to a period when 386MAX
  6348.         has linked high RAM into DOS's memory chain)
  6349.  0Ah    WORD    segment of low-memory portion of 386MAX.SYS
  6350.  0Ch  2 BYTEs    ???
  6351.  0Eh    WORD    segment of ??? memory block or 0000h
  6352.  10h    WORD    bit flags 1 (see #0688)
  6353.  12h    WORD    starting address of video memory in KB
  6354.  14h  2 BYTEs    ???
  6355.  16h    WORD    total high DOS memory in KB
  6356.  18h  2 BYTEs    ???
  6357.  1Ah    WORD    available shared memory in KB
  6358.  1Ch    WORD    KBytes extended memory used by 386MAX
  6359.  1Eh  2 BYTEs    ???
  6360.  20h    WORD    total extended memory in KB
  6361.  22h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
  6362.  24h    WORD    IO port to write (OUT DX,AL) to invoke 386MAX API functions
  6363.           (see #0701)
  6364.  26h    WORD    ??? (depends on DOS version)
  6365.  28h    WORD    size of ??? in paragraphs
  6366.  2Ah    DWORD    machine type (see #0696)
  6367.  2Eh    DWORD    -> first DOS memory control block
  6368.  32h    WORD    system configuration flags (see #0689)
  6369.  34h    WORD    debugging flags 1 (see #0690)
  6370.  36h    WORD    debugging flags 2 (see #0691)
  6371.  38h  2 BYTEs    ???
  6372.  3Ah    WORD    segment of first MCB in high memory chain
  6373.  3Ch    WORD    feature flags 1 (see #0693)
  6374.  3Eh    WORD    feature flags 2 (see #0694)
  6375.  40h    WORD    feature flags 3 (see #0695)
  6376.  42h    WORD    segment of first 386MAX control block??? (see #0697)
  6377.  44h    WORD    amount of memory to report available on INT 15/AH=88h
  6378.  46h  4 BYTEs    ???
  6379.  4Ah    WORD    number of K at start of address space swapped with fast
  6380.           extended memory (SWAP= parameter)
  6381.  4Ch  2 BYTEs    ???
  6382.  4Eh    WORD    segment address of ???
  6383.  50h    WORD    debugging flags 3 (see #0692)
  6384.  52h    DWORD    old INT 21h
  6385.  56h    DWORD    pointer to 386MAX's EMS (INT 67h) handler
  6386. ---386MAX v7.00---
  6387.  5Ah    DWORD    KB of extended memory managed by 386MAX
  6388.  5Eh    DWORD    bytes of extended memory (EXT= parameter)
  6389.  62h  4 BYTEs    ???
  6390.  
  6391. Bitfields for 386MAX bit flags 1:
  6392. Bit(s)    Description    (Table 0688)
  6393.  1    ???
  6394.  2    allow A20 to be enabled/disabled???
  6395.  3    ??? (cleared by calling INT 67 functions or starting MSWindows)
  6396.  4    high RAM present???
  6397.  5    386MAX in AUTO mode
  6398.  6    386MAX enabled
  6399.  7    386MAX is providing EMS services
  6400.  8    ??? (affects API function 08h)
  6401.  9    A20 gate closed (A20 disabled) (see INT 15/AX=2402h)
  6402.  10    Weitek support enabled
  6403.  11    ???
  6404.  12    ROMs not shadowed???
  6405.  13    QPMS has been used
  6406.  14    ???
  6407.  15    ???
  6408.  
  6409. Bitfields for 386MAX system configuration flags:
  6410. Bit(s)    Description    (Table 0689)
  6411.  1    ROM compressed???
  6412.  3    ???
  6413.  5    386MAX loaded into high memory
  6414.  6    Microchannel bus
  6415.  7    Weitek math coprocessor detected
  6416.  9    ??? (also generates INT 01 on ??? and INT 03 on ???)
  6417.  11    PC/XT (thus only single 8259 interrupt controller present, DMA only
  6418.         in 1st megabyte, etc)
  6419.  13    LMLTOP= specified
  6420.  14    enable A20 control???
  6421.  15    ???
  6422.  
  6423. Bitfields for 386MAX debugging flags 1:
  6424. Bit(s)    Description    (Table 0690)
  6425.  0    DEBUG=LED
  6426.  1    DEBUG=X67
  6427.  2    DEBUG=INV
  6428.  3    DEBUG=EMSPTED
  6429.  4    DEBUG=JMP
  6430.  5    DEBUG=CALL
  6431.  6    DEBUG=HLT
  6432.  7    DEBUG=PMR
  6433.  8    DEBUG=CR3
  6434.  9    DEBUG=CAPS or DEBUG=INT
  6435.  10    DEBUG=RC
  6436.  11    DEBUG=ROM
  6437.  12    DEBUG=XM
  6438.  13    DEBUG=SOR
  6439.  14    DEBUG=XR
  6440.  15    DEBUG=EMSERR (generate INT 01 on returning error from EMS call)
  6441.  
  6442. Bitfields for 386MAX debugging flags 2:
  6443. Bit(s)    Description    (Table 0691)
  6444.  0    DEBUG=ROMSWAP
  6445.  1    DEBUG=UNSHADOWROM
  6446.  2    DEBUG=COMPROM
  6447.  3    DEBUG=DPMIPHYS
  6448.  4    DEBUG=ALLROM
  6449.  5    DEBUG=VMS
  6450.  6    DEBUG=XMS (generate INT 01 on XMS calls)
  6451.  7    DEBUG=I06
  6452.  8    DEBUG=VCPI
  6453.  9    DEBUG=XDMA
  6454.  10    DEBUG=X09
  6455.  13    DEBUG=I67 (generate INT 01 on every INT 67 call)
  6456.  14    DEBUG=EVM (generate INT 01 on entering V86 mode)
  6457.  15    DEBUG=EMSSAVE or DEBUG=VDS
  6458.  
  6459. Bitfields for 386MAX debugging flags 3:
  6460. Bit(s)    Description    (Table 0692)
  6461.  10    DEBUG=EPM
  6462.  12    DEBUG=ABIOS
  6463.  13    DEBUG=XMSPTED
  6464.  14    DEBUG=TIME
  6465.  15    DEBUG=SCRUB
  6466.  
  6467. Bitfields for 386MAX feature flags 1:
  6468. Bit(s)    Description    (Table 0693)
  6469.  1    Weitek present
  6470.  2    no DPMI services
  6471.  3    NODMA
  6472.  4    TERSE
  6473.  5    NOROM
  6474.  6    NOPARITY
  6475.  8    NOFLEX (IGNOREFLEXFRAME)
  6476.  11    don't create UMBs
  6477.  12    don't backfill below video memory (NOLOW)
  6478.  13    FRAME= specified
  6479.  14    EXT= specified
  6480.  15    NOEMS, allow prior expanded memory manager to provide EMS
  6481.  
  6482. Bitfields for 386MAX feature flags 2:
  6483. Bit(s)    Description    (Table 0694)
  6484.  0    UNSHIFT specified (FORCEA20 disabled)
  6485.  1    NOXRAM
  6486.  2    NOSCSI specified
  6487.  3    SCREEN specified
  6488.  4    enabled EISADMA
  6489.  5    slow DMA
  6490.  6    RESETKEYB specified
  6491.  7    ???
  6492.  9    TOP384
  6493.  10    ???
  6494.  11    NOWARMBOOT
  6495.  12    USE= specified
  6496.  13    ROM= specified
  6497.  
  6498. Bitfields for 386MAX feature flags 3:
  6499. Bit(s)    Description    (Table 0695)
  6500.  0    Windows3 support enabled
  6501.  1    SHADOWROM
  6502.  2    don't compress ROM (NOCOMPROM)
  6503.  3    ??? (related to PRGREG=)
  6504.  4    ??? (related to PRGREG=)
  6505.  5    SHADOWRAM
  6506.  6    DOS4 specified
  6507.  7    NOLOADHIGH
  6508.  8    NOPULSE
  6509.  11    FORCEA20
  6510.  12    DMA buffer enabled
  6511.  13    NOSCRUB
  6512.  15    NOFRAME
  6513.  
  6514. Bitfields for 386MAX machine type:
  6515. Bit(s)    Description    (Table 0696)
  6516.  12    Amstrad
  6517.  13    Epson
  6518.  14    Zenith Data Systems
  6519.  15    "ASEM"
  6520.  16    NEC
  6521.  17    "HPRS" model codes 69h and 6Ah
  6522.  18    Dell
  6523.  19    "CA"
  6524.  20    ITT (Xtra Business Systems/Alcatel)
  6525.  21    Toshiba 5100
  6526.  22    Olivetti
  6527.  23    Quadram Quad386 (BIOS model FEh, submodel A6h)
  6528.  24    Tandy???
  6529.  25    AST 386
  6530.  26    INBOARD, ??? version
  6531.  27    INBOARD, ??? version
  6532.  28    INBOARD, ??? version
  6533.  29    "HPRS"
  6534.  30    Compaq 386
  6535.  31    JET386
  6536.  
  6537. Format of 386MAX control block:
  6538. Offset    Size    Description    (Table 0697)
  6539.  00h    WORD    segment of next block (FFFFh if last)
  6540.  02h    WORD    segment of previous block (FFFFh if first)
  6541.  04h 12 BYTEs    filename
  6542.  10h    WORD    resident size in paragraphs
  6543.  12h    WORD    environment size???
  6544.  14h    WORD    real prsent environment size + 1 (0000h if ENVSAVE used)
  6545.  16h  2 BYTEs    ???
  6546.  18h    DWORD    initial size or SIZE=n in 386LOAD commandline
  6547.  1Ch    DWORD    SIZE=-1 ???
  6548.  20h    DWORD    SIZE= ???
  6549.  24h    BYTE    PRGREG= if specified, else FFh
  6550.  25h    BYTE    ENVREG= if specified, else FFh
  6551.  26h    BYTE    FlexFrame (00h not present, 01h present)
  6552.  27h  3 BYTEs    ???
  6553.  2Ah    BYTE    GROUP= or 00h if not present
  6554.  2Bh    BYTE    ???
  6555.  2Ch    WORD    PSP
  6556.  
  6557. Format of 386MAX high memory info record:
  6558. Offset    Size    Description    (Table 0698)
  6559.  00h    WORD    segment address of memory region
  6560.  02h    WORD    size of memory region in paragraphs
  6561.  04h    BYTE    type or flags???
  6562.         00h if locked out
  6563.         02h if EMS page frame
  6564.         04h if high RAM
  6565.         42h if ROM
  6566.  05h    BYTE    ???
  6567.  
  6568. Format of 386MAX ROM shadowing record:
  6569. Offset    Size    Description    (Table 0699)
  6570.  00h    WORD    logical start segment of ROM??? (may be used by BlueMAX when it
  6571.           squeezes together the ROMs to make room)
  6572.  02h    WORD    physical start segment of ROM
  6573.  04h  2 BYTEs    ???
  6574.  06h    WORD    size of shadowed ROM in paragraphs
  6575.  08h  2 BYTEs    ???
  6576.  0Ah    WORD    flags
  6577.         bit 15: shadowing enabled for this ROM???
  6578.         bit 14: ???
  6579.         bit 13: ???
  6580.         bit 12: ???
  6581.         bit 10: ???
  6582.  
  6583. (Table 0700)
  6584. Values for 386MAX memory type:
  6585.  00h    unused by EMS
  6586.  01h    DOS
  6587.  04h    page frame overlapping ROM???
  6588.  80h    high memory
  6589.  84h    page frame???
  6590.  87h    video ROM???
  6591. Note:    the type may be 00h (unused) if the 16K page is split among different
  6592.       uses (such as ROM and high RAM)
  6593.  
  6594. (Table 0701)
  6595. Call 386MAX API (via OUT DX,AL) with:
  6596.     STACK: WORD value for DX
  6597.     AH = 00h unused
  6598.         Return: AH = 84h (unsupported function)
  6599.     AH = 01h get high memory information
  6600.         ES:DI -> buffer for array of high memory info records
  6601.             (see #0698)
  6602.         Return: CX = number of records placed in buffer
  6603.     AH = 02h get shadowed ROM info
  6604.         ES:DI -> buffer for array of ROM shadowing records (see #0699)
  6605.         Return: CX = number of records placed in buffer
  6606.     AH = 03h get 386MAX state
  6607.         ES:DI -> 90-byte buffer for state (see #0687)
  6608.         Return: AH = 00h (successful)
  6609.             buffer filled
  6610.     AH = 04h get memory types???
  6611.         ES:DI -> buffer for memory type info (array of bytes, one per
  6612.             16K page) (see #0700)
  6613.         Return:    CX = number of bytes placed in buffer
  6614.     AH = 05h get page table entries
  6615.         AL = A20 control (00h enable A20 first, 01h leave unchanged)
  6616.         CX = buffer size in bytes (0000h = enough for all memory from
  6617.             given start to end of memory managed by 386MAX)
  6618.         SI = first K to report (rounded down to 4K page)
  6619.         ES:DI -> buffer for returned page table entries
  6620.         Return: CX = number of bytes returned (four per 4K page)
  6621.             ES:DI buffer filled
  6622.     AH = 06h get memory speed info
  6623.         ES:DI -> buffer for memory speed records (see #0702)
  6624.         Return: AH = 00h (successful)
  6625.             CX = number of bytes placed in buffer
  6626.         Note:    this function can take over a second to execute
  6627.     AH = 07h map/unmap multiple handle pages
  6628.         DX = EMS handle (on stack)
  6629.         STACK: DWORD -> EMS mapping record
  6630.         Return:    AH = status (00h,80h,83h,8Ah,8Bh)
  6631.         Format of EMS mapping record:
  6632.         Offset    Size    Description
  6633.          00h    WORD    function
  6634.                 0000h use physical page numbers
  6635.                 0001h use segment addresses
  6636.          02h    WORD    EMS handle
  6637.          04h    WORD    number of mapping entries following
  6638.          06h 2N WORDs    logical page number and physical page/segment
  6639.                 logical page FFFFh means unmap physical page
  6640.         SeeAlso: INT 67/AH=50h
  6641.     AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
  6642.         AL = ??? (00h or nonzero)
  6643.         Return: AH = status (00h OK, A4h not possible at this time)
  6644.         Note:    if AL=00h, this function always returns success
  6645.     AH = 09h toggle Bit Flags 1 flags
  6646.         BX = bitmask of bit flags 1's flags to toggle (see #0688)
  6647.         Return: AH = 00h (successful)
  6648.         Note:    enables A20 first
  6649.     AH = 0Ah toggle Debugging Flags 1 flags
  6650.         BX = bitmask of Debugging Flags 1's bits to toggle (see #0690)
  6651.         Return: AH = 00h (successful)
  6652.         Notes:    enables A20 first
  6653.             does ??? if bit 3 on after specified bits are toggled
  6654.     AH = 0Bh toggle Debugging Flags 2 flags
  6655.         BX = bitmask of Debugging Flags 2's bits to toggle (see #0691)
  6656.         Return: AH = 00h (successful)
  6657.         Note:    enables A20 first
  6658.     AH = 0Ch toggle feature flags 3
  6659.         BX = bitmask of feature flags 3's bits to toggle (see #0695)
  6660.         Return: AH = 00h (successful)
  6661.         Note:    enables A20 first
  6662.     AH = 0Dh specify 386MAX high-memory location
  6663.         BX = segment address of high-memory real-mode portion of 386MAX
  6664.         CX = current segment of real-mode stub???
  6665.         Return: AH = status (00h successful)
  6666.             ???
  6667.     AH = 0Eh CRT controller register virtualization
  6668.         AL = subfunction
  6669.             00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
  6670.             01h trap accesses to CRTC I/O ports
  6671.     AH = 0Fh reboot system
  6672.         Return: never
  6673.     AH = 10h unused
  6674.         Return: AH = 84h (unsupported function)
  6675.     AH = 11h get high memory information
  6676.         ES:DI -> 96-byte buffer for high memory info
  6677.         Return: AH = 00h (successful)
  6678.             ES:DI buffer filled
  6679.         Notes:    each byte in buffer contains bit flags for a 4K page in
  6680.               the A000h-FFFFh region
  6681.                 bit 0: page is writeable
  6682.                 bit 1: physical address same as linear address
  6683.                 bit 2: EMS page frame
  6684.                 bit 6: page is part of the QPMS window
  6685.             this function can take over a second to execute,
  6686.               because it does a 128K read for each page in an
  6687.               attempt to flush any RAM cache the system may have
  6688.     AH = 12h shadow RAM mapping
  6689.         AL = subfunction
  6690.             00h unshadow ROMs (except page FFh if NOWARMBOOT set)
  6691.             01h map shadow RAM into ROM regions???
  6692.         Return: AH = 00h (successful) if AL=00h or 01h
  6693.             AH = 8Fh otherwise
  6694.     AH = 13h shadow RAM page protection
  6695.         AL = subfunction
  6696.             00h set all shadowed ROM 4K pages to read-only
  6697.             01h set all shadowed ROM 4K pages to read-write
  6698.         Return: AH = 00h (successful) if AL=00h or 01h
  6699.             AH = 8Fh otherwise
  6700.     AH = 14h get Programmable Option Select info???
  6701.         ES:DI -> 54-byte buffer for POS data???
  6702.         Return: AH = 00h if successful
  6703.             AH = A4h on error
  6704.         Note:    the buffer consists of nine 6-byte fields; the first
  6705.               eight for slots 1-8, the last for the system board
  6706.     AH = 15h ???
  6707.         ???
  6708.         Return: ???
  6709.     AH = 16h get 386MAX memory usage screen
  6710.         ES:DI -> buffer for memory info display
  6711.         CX = size of buffer in bytes
  6712.         Return:    ES:DI buffer filled with '$'-terminated string (if
  6713.                 large enough to hold entire usage screen)
  6714.         Note:    the screen is 0303h bytes in v7.00
  6715.     AH = 17h Windows 3 startup/termination
  6716.         AL = subfunction
  6717.             00h Windows3 initializing
  6718.             DX (on stack) = Windows startup flags
  6719.             DI = Windows version number (major in upper byte)
  6720.             ES:BX = 0000h:0000h
  6721.             DS:SI = 0000h:0000h
  6722.             Return: CX = 0000h if OK for Windows to load
  6723.                    <> 0 if Windows should not load
  6724.                 ES:BX -> startup info structure
  6725.                 DS:SI -> Virtual86 mode enable/disable callback
  6726.             01h Windows3 terminating
  6727.             ES:BX -> ???
  6728.             DX (on stack) = Windows exit flags
  6729.             Return: ???
  6730.     AH = 18h QPMS (Qualitas Protected Memory Services)
  6731.         AL = subfunction
  6732.             00h get QPMS configuration
  6733.             Return: BX = starting segment of QPMS memory window
  6734.                 CX = number of 4K pages reserved for QPMS???
  6735.                 DX = number of 4K pages in QPMS window???
  6736.             01h map QPMS memory page???
  6737.             BX = 4K page number within memory reserved for QPMS???
  6738.             CL = 4K page number within QPMS memory window???
  6739.             02h mark all QPMS memory read-only
  6740.             03h mark all QPMS memory read-write
  6741.         Return: AH = status (00h,8Ah,8Bh,8Fh)
  6742.     AH = 19h get linear address for physical address
  6743.         EDX = physical address (low word on stack)
  6744.         Return: AH = status
  6745.                 00h successful
  6746.                 EDX = linear address at which physical address
  6747.                     may be accessed
  6748.                 8Bh physical address currently not addressable
  6749.         Note:    enables A20 first
  6750.     AH = 1Ah set page table entry
  6751.         EDX = new page table entry (low word on stack)
  6752.         ESI = linear address of page to map (bits 0-11 clear)
  6753.         Return: AH = status (00h,8Bh)
  6754.         Note:    enables A20 first
  6755.     AH = 1Bh get ???
  6756.         Return: AH = status
  6757.             BX = ???
  6758.             CX = number of ???
  6759.             EDX = physical address of ???
  6760.     AH = 1Ch get original interrupt vector
  6761.         AL = interrupt vector (00h-7Fh)
  6762.         Return: AH = 00h (successful)
  6763.             EDX = original vector before 386MAX loaded (segment in
  6764.                 high word, offset in low word)
  6765.         Note:    no range checking is performed; requests for INTs 80h-
  6766.               FFh will return random values
  6767.     AH = 1Dh display string???
  6768.         SI = ???
  6769.         Return: AH = 00h (successful)
  6770.             ???
  6771.         Note:    this function appears to be broken in v7.00
  6772.     AH = 1Eh get memory info
  6773.         ES:DI -> memory info (see #0703)
  6774.         Return: ???
  6775.     AH = 1Fh get DPMI host information
  6776.         Return: AX = 0000h if successful
  6777.             BX = DPMI flags (see #1819 at INT 31/AX=0400h)
  6778.             CL = CPU type (02h = 80286, 03h = 80386, etc.)
  6779.             DX = DPMI ver supported (DH=major, DL=2-digit minor)
  6780.             SI = ???
  6781.             ES???:DI -> ???
  6782.         Note:    NOP if NODPMI switch specified
  6783.     AH = 20h (v7.00) get ???
  6784.         AL = index of ???
  6785.         Return: EDX = ??? for specified ???
  6786.     AH = 21h (v7.00) STACKS support
  6787.         AL = 00h get STACKS parameters
  6788.         Return: BX = ??? (0060h for v7.00)
  6789.             CX = number of stacks for hardware interrupts
  6790.             DX = size of each stack in bytes
  6791.             SI = ??? (low and high bytes are separate values)
  6792.             DI = ??? (low and high bytes are separate values)
  6793.                 low byte = logical page number set by subfn 02h
  6794.             ES = ???
  6795.         AL = 01h set ??? "EMM2_DSTKS"
  6796.         EBX = ???
  6797.         ECX = ???
  6798.         AL = 02h set ???
  6799.         BL = logical page number for ??? (00h-03h)
  6800.         Return: AH = status (00h,8Ah)
  6801.     AH = 22h (v7.00) call ??? for every load module
  6802.         AL = which function to call
  6803.         00h call ???
  6804.         else call ????
  6805.         Return: AH = 00h
  6806.         Note: if AL=00h, calls the protected-mode function pointed at by
  6807.         the DWORD at offset 22h from the start of each module installed
  6808.         by a LOAD= directive; if AL<>00h, it calls the function
  6809.         pointed at by the DWORD at offset 28h of the load module
  6810.     AH = 23h (v7.00) ???
  6811.         AL = 00h set ???
  6812.         BL = ???
  6813.         Return:    AH = 00h or unchanged (depending on ???)
  6814.         AL = 01h set ???
  6815.         BL = ???
  6816.         BH = ???
  6817.         CX = ???
  6818.         DX = ??? (on top of stack)
  6819.         Return: AH = status (00h if successful, 8Fh once table full)
  6820.         Note:    this call adds one entry to an internal table on each
  6821.               call, until the table is full
  6822.         AL = 02h get ???
  6823.         CX = size of buffer
  6824.         ES:DI -> buffer for ??? (60 bytes total data)
  6825.         Return: CX = number of bytes actually returned
  6826.         Note:    returns the array storing the values set with AX=2301h
  6827.         Format of one entry in array:
  6828.         Offset    Size    Description
  6829.          00h    BYTE    ??? (BL from subfn 01h)
  6830.          01h    WORD    ??? (CX from subfn 01h)
  6831.          03h    BYTE    ??? (BH from subfn 01h)
  6832.          04h    WORD    ??? (DX from subfn 01h)
  6833.         AL = 03h set ??? name/path
  6834.         ES:DI -> buffer containing ASCIZ ???
  6835.         AL = 04h get ???
  6836.         ES:DI -> buffer for ASCIZ ???
  6837.         Note: the ASCIZ string for subfunctions 03h and 04h does not appear
  6838.         to be used by 386MAX, and may serve merely for communication
  6839.         between two other Qualitas programs
  6840.     AH = 24h (v7.00) high memory control
  6841.         AL = 00h get high memory state
  6842.         Return: BX = current state
  6843.                 00h high memory removed from DOS memory chain
  6844.                 01h high memory included in DOS memory chain
  6845.         AL = 01h set high memory state
  6846.         BX = new state
  6847.             00h high memory removed from DOS memory chain
  6848.             01h high memory included in DOS memory chain
  6849.             else
  6850.             Return: ??? (error, but return varies according to ???)
  6851.     AH = 25h (v7.00) remove high RAM from DOS memory chain
  6852.     AH = 26h (v7.00) ???
  6853.         BX = ???
  6854.         CX = ???
  6855.         SI = ???
  6856.         DI = ???
  6857.         Return: AH = status
  6858.             BX = ???
  6859.             CX = ???
  6860.     AH = 27h (v7.00) ???
  6861.         AL = 00h get ???
  6862.         Return: BX = number of paragraphs for ???
  6863.         AL = 01h ???
  6864.         BX = ???
  6865.         ES??? = ???
  6866.         AL = 02h ???
  6867.         ???
  6868.         AL = 03h ???
  6869.         CX = ???
  6870.         DX = ???
  6871.         ES??? = ???
  6872.         Return: ???
  6873.     AH = 28h (v7.00) get ???
  6874.         Return: AH = status (00h,8Fh) (see #2253 at INT 67/AH=40h)
  6875.             if AH=00h,
  6876.                 CX = ???
  6877.                 DX = ???
  6878.     AH = 29h (v7.00) get ???
  6879.         Return: AX = ???
  6880.     AH = 40h-5Dh EMS services (see INT 67/AH=40h etc)
  6881.     AH = DEh VCPI services (see INT 67/AX=DE00h etc)
  6882. Return: AH = status (as for EMS INT 67 calls)
  6883.         00h successful
  6884.         80h internal error
  6885.         81h hardware malfunction
  6886.         83h invalid handle
  6887.         84h    undefined function
  6888.         8Ah invalid logical page nuber
  6889.         8Bh illegal physical page number
  6890.         8Fh undefined subfunction
  6891.         A4h access denied
  6892.         etc.
  6893.     STACK popped (value placed in DX if no specific return value for DX)
  6894.  
  6895. Format of 386MAX memory speed record:
  6896. Offset    Size    Description    (Table 0702)
  6897.  00h    DWORD    page table entry for 4K page
  6898.  04h    WORD    number of microticks (840ns units) required for REP LODSD of
  6899.           entire 4K page
  6900.  
  6901. Format of 386MAX memory info [array]:
  6902. Offset    Size    Description    (Table 0703)
  6903.  00h    DWORD    linear start address
  6904.  04h    DWORD    size in bytes
  6905.  08h    WORD    XMS handle (if next byte = 04h)
  6906.         ??? (if next byte = 05h)
  6907.         ??? (if next byte = 06h)
  6908.         ??? (if next byte = 13h)
  6909.         ??? (if next byte = 14h)
  6910.         ??? (if next byte = 15h)
  6911.         ??? (if next byte = 23h)
  6912.         ??? (if next byte = 24h)
  6913.         ??? (if next byte = 26h)
  6914.         else unused
  6915.  0Ah    BYTE    type
  6916.         00h = ???, 01h = VDISK,
  6917.         02h = INT 15h extended memory, 03h = ??? extended,
  6918.         04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???,
  6919.         08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???,
  6920.         11h = ???, 12h = ???, 14h = ???, 15h = ???,
  6921.         19h = ???, 1Ah = ???, 1Bh = ???,
  6922.         1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???,
  6923.         20h = ???, 21h = ???, 23h = ???, 24h = ???,
  6924.         26h = ???
  6925.  0Bh    BYTE    ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h;
  6926.              80h for types 04h/13h-15h/23h-26h;
  6927.             ??? for type 05h)
  6928. --------V-214402-----------------------------
  6929. INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
  6930.     AX = 4402h
  6931.     BX = file handle for device "PGS1600$"
  6932.     CX = 0018h (size of buffer)
  6933.     DS:DX -> configuration buffer (see #0704)
  6934. Return: CF clear if successful
  6935.         buffer filled
  6936.         AX = number of bytes actually copied
  6937.     CF set on error
  6938.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6939. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  6940.       display adapter, which provides a 1600x1200 monochrome display as
  6941.       well as one of two emulations, MDA or CGA.
  6942. SeeAlso: AX=4403h"PGS1600"
  6943.  
  6944. Format of PGS1600.DEV configuration information:
  6945. Offset    Size    Description    (Table 0704)
  6946.  00h    WORD    version (high byte = major, low byte = minor)
  6947.  02h    WORD    board initialisation mode
  6948.  04h    WORD    board I/O address
  6949.         03D0h CGA emulation
  6950.         03B0h MDA emulation
  6951.         0390h no emulation
  6952.         0350h no emulation, alternate
  6953.  06h    WORD    emulation buffer segment
  6954.         B800h    CGA emulation
  6955.         B000h    MDA emulation
  6956.         0000h    no emulation
  6957.  08h    WORD    PG1600 graphics buffer segment
  6958.  0Ah    WORD    number of bytes between consecutive graphic rows
  6959.  0Ch    WORD    horizontal pixel size
  6960.  0Eh    WORD    vertical pixel size
  6961.  10h    WORD    horizontal dots per inch
  6962.  12h    WORD    vertical dots per inch
  6963.  14h    WORD    graphics buffer bits per pixel
  6964.  16h    WORD    monitor bits per pixel
  6965. --------N-214402-----------------------------
  6966. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  6967.     AX = 4402h
  6968.     BX = file handle referencing device "$IPCUST"
  6969.     CX, DS:DX ignored
  6970. Return: CF clear if successful
  6971.         AX destroyed
  6972.     CF set on error
  6973.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  6974. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  6975.       version 2.05.     If less than the entire data is read or written,
  6976.       the next read/write continues where the previous one ended; this
  6977.       call and AX=4403h both reset the location at which the next
  6978.       operation starts to zero
  6979.     v2.1+ uses a new configuration method, but allows the installation
  6980.       of IPCUST.SYS for backward compatibility with other software which
  6981.       must read the PC/TCP configuration
  6982. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
  6983. --------N-214402-----------------------------
  6984. INT 21 - WORKGRP.SYS - GET API ENTRY POINT
  6985.     AX = 4402h
  6986.     BX = file handle for device "NET$HLP$"
  6987.     CX = 0008h
  6988.     DS:DX -> buffer for entry point record (see #0705)
  6989. Return: CF clear if successful
  6990.         AX = number of bytes actually read
  6991.     CF set on error
  6992.         AX = error code
  6993. Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
  6994.       permits communication with PCs running Windows for Workgroups or
  6995.       LAN Manager
  6996. SeeAlso: AH=3Fh"WORKGRP.SYS"
  6997.  
  6998. Format of WORKGRP.SYS entry point record:
  6999. Offset    Size    Description    (Table 0705)
  7000.  00h    WORD    3633h  \ signature???
  7001.  02h    WORD    EF6Fh  /
  7002.  04h    DWORD    address of entry point (see #0706)
  7003. Note:    first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
  7004.       IOCTL rather than READ to get the entry point record
  7005.  
  7006. (Table 0706)
  7007. Call WORKGRP entry point with:
  7008.     STACK:    WORD    function number (0000h-0009h)
  7009. Return: STACK unchanged
  7010. SeeAlso: #0707,#0708,#0709,#0710,#0711,#0712,#0713,#0714
  7011.  
  7012. (Table 0707)
  7013. Call WORKGRP function 00h with:
  7014.     STACK:    WORD    0000h (function "get ???")
  7015. Return: DX:AX -> data table
  7016.  
  7017. (Table 0708)
  7018. Call WORKGRP function 01h with:
  7019.     STACK:    WORD    0001h (function "hook ???")
  7020. Return: STACK:    DWORD    pointer to ???
  7021.         WORD    0001h (function number)
  7022.  
  7023. (Table 0709)
  7024. Call WORKGRP function 02h with:
  7025.     STACK:    WORD    0002h (function "unhook ???")
  7026.     ???
  7027. Return: ???
  7028.  
  7029. (Table 0710)
  7030. Call WORKGRP function 03h with:
  7031.     STACK:    WORD    0003h (function "reenable printer port")
  7032.         WORD    LPT port number
  7033. Return: ???
  7034.  
  7035. (Table 0711)
  7036. Call WORKGRP function 04h with:
  7037.     STACK:    WORD    0004h (function "disable printer port")
  7038.         WORD    LPT port number
  7039. Return: ???
  7040.  
  7041. (Table 0712)
  7042. Call WORKGRP function 05h with:
  7043.     STACK:    WORD    0005h (function "???")
  7044.         ???
  7045. Return: ???
  7046.  
  7047. (Table 0713)
  7048. Call WORKGRP function 06h with:
  7049.     STACK:    WORD    0006h (function "???")
  7050. Return: STACK unchanged
  7051.     AX = 0000h
  7052.     DX = 0000h
  7053.  
  7054. (Table 0714)
  7055. Call WORKGRP functions 07h-09h with:
  7056.     STACK:    WORD    0007h-0009h (NOP functions)
  7057. Return: STACK unchanged
  7058.     AX = 0001h
  7059.     DX = 0000h
  7060. --------N-214402-----------------------------
  7061. INT 21 - 10NET v5.0 - 10BEUI.DOS - API
  7062.     AX = 4402h
  7063.     BX = file handle referencing device "10BEUI$"
  7064.     DS:DX -> parameter record (see #0715)
  7065.     CX ignored
  7066. Return: CF clear if successful
  7067.         AX destroyed
  7068.     CF set on error
  7069.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7070. SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
  7071.  
  7072. Format of 10NET 10BEUI.DOS parameter record:
  7073. Offset    Size    Description    (Table 0715)
  7074.  00h    WORD    000Ah (function number???)
  7075.  02h    WORD    ???
  7076.  04h    DWORD    pointer to buffer for ???
  7077.  08h  4 BYTEs    ???
  7078.  0Ch    WORD    transfer size
  7079. --------N-214402-----------------------------
  7080. INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
  7081.     AX = 4402h
  7082.     BX = file handle referencing device "MEMMGR0$"
  7083.     DS:DX -> 6-byte buffer for interface info (see #0716)
  7084.     CX ignored
  7085. Return: CF clear if successful
  7086.         AX destroyed
  7087.     CF set on error
  7088.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7089. SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
  7090.  
  7091. Format of 10NET 10MEMMGR.SYS interface info:
  7092. Offset    Size    Description    (Table 0716)
  7093.  00h    DWORD    address of entry point (see #0717)
  7094.  04h    WORD    version (0500h for v5.00)
  7095.  
  7096. (Table 0717)
  7097. Call 10NET 10MEMMGR.SYS entry point with:
  7098.     AL = 01h ???
  7099.         BX = ???
  7100.         Return: CF clear if successful
  7101.             CF set on error
  7102.             AX = error code
  7103.     AL = 02h ???
  7104.         ???
  7105.     AL = 03h ???
  7106.         ???
  7107.     AL = 04h set/restore memory allocation strategy
  7108.         BX = subfunction
  7109.         0000h set strategy
  7110.         0001h restore strategy
  7111.         Return: CF clear if successful
  7112.             CF set on error (if function disabled)
  7113.             various registers destroyed
  7114.     AL = other
  7115.         Return: CF set
  7116.             AX = 0000h
  7117.             BL = 01h
  7118. --------V-214402-----------------------------
  7119. INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
  7120.     AX = 4402h
  7121.     BX = file handle for device "$$$$RGDI"
  7122.     CX = 0006h (size of returned data)
  7123.     DS:DX -> location record (see #0718)
  7124. Return: CF clear if successful
  7125.         buffer filled
  7126.     CF set on error
  7127.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7128. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  7129. SeeAlso: AX=4403h"RGDI"
  7130.  
  7131. Format of Compaq AG1024.SYS location record:
  7132. Offset    Size    Description    (Table 0718)
  7133.  00h    WORD    signature 55AAh
  7134.  02h    WORD    segment of ???
  7135.  04h    WORD    segment of device driver's code
  7136. --------N-214402-----------------------------
  7137. INT 21 - FTPSOFT.DOS v3.1 - GET ???
  7138.     AX = 4402h
  7139.     BX = file handle for device "FTPSOFT$"
  7140.     CX = size of buffer
  7141.     DS:DX -> buffer for data (see #0719)
  7142. Return: CF clear if successful
  7143.         buffer filled
  7144.     CF set on error
  7145.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7146. Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
  7147.        FTP Software, Inc.
  7148. SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
  7149.  
  7150. Format of FTPSOFT.DOS data:
  7151. Offset    Size    Description    (Table 0719)
  7152.  00h    WORD    (call) BA98h (if different, no data returned)
  7153.  02h    DWORD    -> NDIS common characteristics table
  7154.           (see #0658 at AX=4402h"NDIS")
  7155.  06h    DWORD    (call) -> new dispatch table (see #0660 at AX=4402h"NDIS")
  7156.  0Ah    DWORD    -> 28-byte buffer for ??? data
  7157.  0Eh    DWORD    ???
  7158.  12h    DWORD    -> FAR function to reset dispatch jump table to defaults
  7159.  16h    BYTE    ???
  7160. Note:    the addresses in the new dispatch table are copied into an internal
  7161.       jump table which may be reset by calling the function pointed at by
  7162.       offset 12h
  7163. --------n-214402-----------------------------
  7164. INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
  7165.     AX = 4402h
  7166.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  7167.     CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
  7168.     DS:DX -> buffer for entry point record (see #0720)
  7169. Return: CF clear if successful
  7170.         buffer filled
  7171.     CF set on error
  7172.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7173. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  7174.       which provides pen capability to keyboard-based programs, is bundled
  7175.       with IBM DOS 6.1
  7176. SeeAlso: AX=4403h"PENDEV.SYS"
  7177.  
  7178. Format of PENDEV.SYS entry point record:
  7179. Offset    Size    Description    (Table 0720)
  7180.  00h    DWORD    -> array of jumps
  7181.  04h    WORD    offset of function to retrieve entry point (see #0721)
  7182.  06h  2 BYTEs    signature "Pe"
  7183.  08h    WORD    offset of function to set entry point (see #0722)
  7184.  0Ah  2 BYTEs    signature "nD"
  7185.  0Ch    WORD    offset of function to clear entry point (see #0723)
  7186.  0Eh    WORD    signature "OS"
  7187.  
  7188. (Table 0721)
  7189. Call PENDEV.SYS function to retrieve entry point with:
  7190.     AX = index of entry point (0-9)
  7191. Return: CF clear if successful
  7192.         DX:AX -> desired entry point
  7193.     CF set on error (AX out of range)
  7194.  
  7195. (Table 0722)
  7196. Call PENDEV.SYS function to set entry point with:
  7197.     AX = index of entry point (0-9)
  7198.     DX:SI -> new handler
  7199. Return: CF clear if successful
  7200.     CF set on error (AX out of range)
  7201.  
  7202. (Table 0723)
  7203. Call PENDEV.SYS function to clear entry point with:
  7204.     AX = index of entry point (0-9)
  7205. Return: CF clear if successful
  7206.     CF set on error (AX out of range)
  7207. Note:    resets the jump at the specified entry point to its default target,
  7208.       which simply returns
  7209. --------N-214402-----------------------------
  7210. INT 21 U - LAN Manager - TCPDRV.DOS - API
  7211.     AX = 4402h
  7212.     BX = file handle referencing device "TCPDRV$"
  7213.     CX = 0019h
  7214.     DS:DX -> buffer containing request block (see #0724)
  7215. Return: CF clear if successful
  7216.         buffer filled
  7217.     CF set on error
  7218.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7219. Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
  7220.       TCP/IP protocol stack
  7221.  
  7222. Format of TCPDRV.DOS request block:
  7223. Offset    Size    Description    (Table 0724)
  7224.  00h    BYTE    (call) function number
  7225.         00h initialize ???
  7226.         06h get ???
  7227.         07h get ???
  7228.  01h    BYTE    (call) 00h
  7229.         (ret) error code if error, unchanged if successful
  7230.  02h    WORD    signature 4354h ('CT')
  7231. ---function 00h---
  7232.  04h    DWORD    (call) pointer to ??? FAR function
  7233.         function is called with ES:BX -> device driver request used to
  7234.           invoke this function
  7235.  08h  4 BYTEs    ???
  7236.  0Ch    DWORD    (call) pointer to ??? record, WORD at offset 22h is read
  7237.  10h    DWORD    (ret) -> ??? buffer if 0000h:0000h on call
  7238. ---function 06h---
  7239.  04h  4 BYTEs    ???
  7240.  08h    DWORD    (ret) pointer to ???
  7241. ---function 07h---
  7242.  04h    DWORD    (ret) pointer to ??? record
  7243. --------y-214402-----------------------------
  7244. INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
  7245.     AX = 4402h
  7246.     BX = file handle referencing device "RECLOWLD"
  7247.     DS:DX -> buffer for address list (see #0725)
  7248.     CX ignored
  7249. Return: CF clear if successful
  7250.         buffer filled
  7251.     CF set on error
  7252.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7253.  
  7254. Format of CPRLOW address list:
  7255. Offset    Size    Description    (Table 0725)
  7256.  00h    WORD    segment of CPRLOW code
  7257.  02h    WORD    offset in code segment of ??? entry point
  7258.         (switches into protected mode)
  7259.  04h    WORD    offset in code segment of jump array (see #0726)
  7260.  06h    WORD    segment of copy of interrupt vector table at CPRLOW load time
  7261. Note:    neither the entry point nor the jump array is valid until after a
  7262.       CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
  7263.  
  7264. Format of CPRLOW jump array:
  7265. Offset    Size    Description    (Table 0726)
  7266.  00h  3 BYTEs    initialize CPRLOW interrupt hooks
  7267.  03h  3 BYTEs    reset timers and enable CPR (hotkey enable)
  7268.  06h  3 BYTEs    disable CPR (hotkey disable)
  7269.  09h  3 BYTEs    clear ??? flag, hotkey disable, and ???
  7270.  0Ch  3 BYTEs    initialize delay loop counter (destroys AX,BX,CX,DX)
  7271.  0Fh  3 BYTEs    disable CPR completely (commandline /DISABLE)
  7272.  12h  3 BYTEs    enable ??? if CPR enabled by both cmdline and hotkey
  7273.  15h  3 BYTEs    enable CPR (commandline /ENABLE)
  7274. --------s-214402-----------------------------
  7275. INT 21 U - Creative Technology CTMMSYS.SYS v1.00.01 - API
  7276.     AX = 4402h
  7277.     BX = file handle for device "CTMMSYS$"
  7278.     CX = 0004h (size of data)
  7279.     DS:DX -> buffer for entry point (see #0727)
  7280. Return: CF clear if successful
  7281.         buffer updated
  7282.     CF set on error
  7283.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7284. Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
  7285.       driver
  7286. SeeAlso: AX=4402h"CTSB2",INT 80/BX=0000h"SBFM"
  7287.  
  7288. Format of CTMMSYS.SYS entry point record:
  7289. Offset    Size    Description    (Table 0727)
  7290.  00h    DWORD    (call) signature 4D6D7443h (ASCII "CtmM")
  7291.         (ret) pointer to CTMMSYS entry point (see #0728)
  7292. SeeAlso: #0729
  7293.  
  7294. (Table 0728)
  7295. Call CTMMSYS.SYS entry point with:
  7296.     AX = ???
  7297.     STACK:    WORD    ???
  7298.         WORD    ???
  7299.         WORD    ??? (0001h,0002h,0005h,0006h)
  7300.         WORD    ???
  7301.         DWORD    -> ???
  7302.         WORD    ???
  7303.         WORD    ???
  7304. Return: DX:AX = ??? or error code
  7305.         0000h:000Bh invalid value for ???
  7306.         0000h:000Fh API call already in progress
  7307. SeeAlso: #0727
  7308. --------s-214402-----------------------------
  7309. INT 21 U - Creative Technology CTSB2.SYS v1.01.01 - API
  7310.     AX = 4402h
  7311.     BX = file handle for device "CTSOUND0"
  7312.     CX = 0004h (size of data)
  7313.     DS:DX -> buffer for entry point (see #0729)
  7314. Return: CF clear if successful
  7315.         buffer updated
  7316.     CF set on error
  7317.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7318. Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
  7319.       driver
  7320. SeeAlso: AX=4402h"CTMMSYS",INT 80/BX=0000h"SBFM"
  7321.  
  7322. Format of CTSB2.SYS entry point record:
  7323. Offset    Size    Description    (Table 0729)
  7324.  00h    DWORD    (call) signature 4D6D7443h (ASCII "CtmM")
  7325.         (ret) pointer to CTSB2 entry point (see #0730)
  7326. SeeAlso: #0727
  7327.  
  7328. (Table 0730)
  7329. Call CTSB2.SYS entry point with:
  7330.     AX = ???
  7331.     STACK:    DWORD    -> ???
  7332.         WORD    function number
  7333.             (0100h,0200h,0300h,0400h,0500h,0600h,0701h)
  7334.         DWORD    -> ???
  7335.         WORD    ???
  7336.         WORD    ???
  7337. Return: DX:AX = ??? or error code
  7338.         0000h:0004h invalid subfunction???
  7339.         0000h:000Bh invalid value for ???
  7340.         0000h:000Fh API call already in progress
  7341. SeeAlso: #0729
  7342. --------m-214402-----------------------------
  7343. INT 21 U - Novell DOS 7 EMM386.EXE - GET STATE RECORD???
  7344.     AX = 4402h
  7345.     BX = file handle for device "EMMXXXX0"
  7346.     CX = 003Eh (size of state record)
  7347.     DS:DX -> buffer for state record (see #0731)
  7348. Return: CF clear if successful
  7349.         buffer filled (see #2208 at INT 67/AH=3Fh)
  7350.     CF set on error
  7351.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7352.  
  7353. Format of Novell DOS 7 EMM386.EXE state record:
  7354. Offset    Size    Description    (Table 0731)
  7355.  00h    WORD    signature EDC0h
  7356.  02h 60 BYTEs    ???
  7357. --------m-214402SF00-------------------------
  7358. INT 21 U - Memory Managers - GET API ENTRY POINT
  7359.     AX = 4402h subfn 00h
  7360.     BX = file handle for device "EMMXXXX0"
  7361.     CX = 0006h (size of buffer in bytes)
  7362.     DS:DX -> buffer for API entry point record (see #0732)
  7363.         first byte must be 00h on entry
  7364. Return: CF clear if successful
  7365.         buffer filled (see #2208 at INT 67/AH=3Fh)
  7366.     CF set on error
  7367.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7368. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  7369.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  7370.     if no other program has hooked INT 67, an alternate installation
  7371.       check for CEMM is testing for the string
  7372.       "COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  7373.       handler's segment; if present, the word at offset 12h contains the
  7374.       offset of the API entry point
  7375. SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
  7376.  
  7377. Format of memory manager API entry point record:
  7378. Offset    Size    Description    (Table 0732)
  7379.  00h    WORD    ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
  7380.  02h    DWORD    manager's private API entry point
  7381.         (see #0733,#2271 at INT 67/AX=FFA5h)
  7382.  
  7383. (Table 0733)
  7384. Call CEMM v5.10+ entry point with:
  7385.     AH = 00h get memory manager's state
  7386.         Return: AH = state
  7387.             bit 0: turned OFF
  7388.             bit 1: AUTO mode enabled
  7389.     AH = 01h set memory manager's state
  7390.         AL = new state (00h ON, 01h OFF, 02h AUTO)
  7391.         Return: CF clear if successful
  7392.             CF set on error
  7393.     AH = 02h Weitek coprocessor support
  7394.         AL = subfunction
  7395.         00h get Weitek support state
  7396.             Return: AL = status
  7397.                 bit 0: Weitek coprocessor is present
  7398.                 bit 1: Weitek support is enabled
  7399.         01h turn on Weitek support
  7400.         02h turn off Weitek support
  7401.         Return: CF clear if successful
  7402.             CF set on error
  7403.             AH = error code (01h invalid subfunc, 02h no Weitek)
  7404.     AH = 05h get statistics
  7405.         ???
  7406.     AH > 06h
  7407.         Return: CF set
  7408.             AH = 01h (invalid function)
  7409. Notes:    AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
  7410.       compatibility with earlier versions of CEMM
  7411.     in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
  7412.       stating that a different version of CEMM is installed and it is
  7413.       therefore not possible to display the statistics
  7414. --------m-214402SF01-------------------------
  7415. INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
  7416.     AX = 4402h subfn 01h
  7417.     BX = file handle for device "EMMXXXX0"
  7418.     CX = 0006h (size of buffer in bytes)
  7419.     DS:DX -> buffer for EMM import structure record (see #0734)
  7420.         first byte must be 01h on entry
  7421. Return: CF clear if successful
  7422.         buffer filled (see also #2208 at INT 67/AH=3Fh)
  7423.     CF set on error
  7424.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7425. Notes:    this function is supported by Microsoft EMM386.EXE v4.45+,
  7426.       QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
  7427.       as it starts up
  7428.     for QEMM-386, this call always returns an error if Windows3 support
  7429.       has been disabled with the NW3 switch
  7430. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
  7431. SeeAlso: INT 67/AH=3Fh
  7432.  
  7433. Format of EMM import structure record:
  7434. Offset    Size    Description    (Table 0734)
  7435.  00h    DWORD    physical address of EMM import structure (see #0735)
  7436.  04h    BYTE    EMM import structure major version
  7437.  05h    BYTE    EMM import structure minor version
  7438. Note:    version 1.00 contains only EMS information (Windows 3.0+)
  7439.     version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
  7440.     version 1.11 is version 1.10 plus memory manager maker/product name
  7441. SeeAlso: #2248
  7442.  
  7443. Format of Global EMM Import record:
  7444. Offset    Size    Description    (Table 0735)
  7445.  00h    BYTE    bit flags
  7446.         bit 2: ???
  7447.         bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
  7448.         bit 4: no UMB???
  7449.  01h    BYTE    reserved (0)
  7450.  02h    WORD    size of structure in bytes
  7451.  04h    WORD    structure version
  7452.  06h    DWORD    reserved
  7453.  0Ah 384 BYTEs    64 EMS frame status records (see #0736), one per 16K of
  7454.           real-mode 1M address space
  7455. 18Ah    BYTE    ??? (must be at least 3*number_of_EMS_frames+4)
  7456. 18Bh    BYTE    number of UMB frame descriptors following
  7457. 18Ch 4N DWORDs    UMB frame descriptors
  7458.         each is 4 DWORDs giving physical page numbers for the four
  7459.           4K pages of a 16K EMS frame (00000000h if non-UMB page)
  7460. var    BYTE    number of EMS handle info records following
  7461.     16N BYTEs    EMS handle info records (see #0738)
  7462. ---version 1.10+ ---
  7463.     DWORD    realmode INT 67 vector (used by Windows to set breakpoints)
  7464.     DWORD    physical address of HMA page table values
  7465.     BYTE    number of free page entries following
  7466.      2N DWORDs    free page entries
  7467.         each is:
  7468.             DWORD    physical page number
  7469.             DWORD    number of consecutive physical pages
  7470.     BYTE    number of XMS handle info records following
  7471.         00h if memory manager does not emulate XMS or has real mode
  7472.           XMS code which can execute in the Windows environment
  7473.     12N BYTEs    XMS handle info records (see #0739)
  7474.     BYTE    number of free UMB info records following
  7475.      2N WORDs    free UMB info records
  7476.         each is:
  7477.             WORD    real mode start segment
  7478.             WORD    size in paragraphs
  7479. ---version 1.11---    
  7480.      20 BYTEs    blank-padded maker name
  7481.      20 BYTEs    blank-padded product name
  7482.  
  7483. Format of EMS frame status record:
  7484. Offset    Size    Description    (Table 0736)
  7485.  00h    BYTE    frame type (see #0737)
  7486.  01h    BYTE    owner handle (00h/FFh = none) from frame including UMB
  7487.         index to UMB frame descriptors
  7488.  02h    WORD    logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
  7489.  04h    BYTE    EMS physical page number (FFh for non-EMS = don't care???)
  7490.  05h    BYTE    flags for non-EMS frames (00h for EMS frame)
  7491.         bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
  7492.           10: direct mapping (linear address = physical address)
  7493.           01: UMB mapping
  7494.  
  7495. Bitfields for EMS frame type:
  7496. Bit(s)    Description    (Table 0737)
  7497.  0    EMS frame
  7498.  1    (if EMS frame) in standard 64K page frame
  7499.  2    first 4K of frame is UMB
  7500.  3    second 4K of frame is UMB
  7501.  4    third 4K of frame is UMB
  7502.  5    last 4K of frame is UMB
  7503.  
  7504. Format of EMS handle info record:
  7505. Offset    Size    Description    (Table 0738)
  7506.  00h    BYTE    handle number (00h = system handle)
  7507.  01h    BYTE    flags
  7508.         bit 0: normal handle rather than system handle
  7509.         bit 2: ??? (set by some EMS managers)
  7510.  02h  8 BYTEs    EMS handle's name
  7511.  0Ah    WORD    number of 16K pages for handle
  7512.  0Ch    DWORD    physical address of page table entries forming page map
  7513. Note:    all values should be zero for the system handle if no large frame
  7514.       support is present
  7515.  
  7516. Format of XMS handle info record:
  7517. Offset    Size    Description    (Table 0739)
  7518.  00h    WORD    handle
  7519.  02h    WORD    flags
  7520.         bit 0: handle usable by Windows
  7521.             (already in use when Windows started if clear)
  7522.         bit 1: reserved (0)
  7523.  04h    DWORD    size in KB (may be zero, used only if flags bit 0 set)
  7524.  08h    DWORD    physical address (only if flags bit 0 set)
  7525. --------m-214402SF02-------------------------
  7526. INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
  7527.     AX = 4402h subfn 02h
  7528.     BX = file handle for device "EMMXXXX0"
  7529.     CX = 0002h (size of buffer in bytes)
  7530.     DS:DX -> buffer for memory manager version (see #0740)
  7531.         first byte must be 02h on entry
  7532. Return: CF clear if successful
  7533.         buffer filled
  7534.     CF set on error
  7535.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7536. Note:    this function is supported by Microsoft EMM386.EXE v4.45+ and
  7537.       CEMM v5.10+, and is intended for use by MS Windows as it starts up
  7538. SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
  7539.  
  7540. Format of memory manager version:
  7541. Offset    Size    Description    (Table 0740)
  7542.  00h    BYTE    major version
  7543.  01h    BYTE    minor version (binary)
  7544. --------m-214402-----------------------------
  7545. INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
  7546.     AX = 4402h
  7547.     BX = file handle for device "EMMXXXX0"
  7548.     CX = size of buffer in bytes (varies, see #0741)
  7549.     DS:DX -> buffer for returned data (see #0741)
  7550.         first byte must be set on entry to indicate desired data
  7551. Return: CF clear if successful
  7552.         buffer filled
  7553.     CF set on error
  7554.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7555. Notes:    an error is returned if the number of bytes to be read does not match
  7556.       the number of bytes returned for the specified data item
  7557.     this function is part of the interface which allows MS Windows to
  7558.       cooperate with memory managers
  7559. SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
  7560.  
  7561. Format of EMM386.EXE data buffer:
  7562. Offset    Size    Description    (Table 0741)
  7563.  00h    BYTE    (call) function
  7564.         03h get ???
  7565.         04h get ???
  7566. ---function 03h---
  7567.  00h    WORD    ???
  7568.  02h    WORD    ???
  7569. ---function 04h---
  7570.  00h    WORD    segment of UMB containing EMM386 code/data
  7571.  02h    WORD    number of paragraphs of EMM386 code/data in UMB
  7572.  04h    WORD    ???
  7573. ----------214402-----------------------------
  7574. INT 21 U - IFSHLP.SYS - GET ENTRY POINT
  7575.     AX = 4402h
  7576.     BX = file handle for device "IFS$HLP$"
  7577.     CX = 0008h (size of buffer in bytes)
  7578.     DS:DX -> buffer for entry point record (see #0639 at AH=3Fh"IFSHLP")
  7579. Return: CF clear if successful
  7580.         buffer filled
  7581.     CF set on error
  7582.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7583. SeeAlso: AH=3Fh"IFSHLP"
  7584. --------D-214403-----------------------------
  7585. INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
  7586.     AX = 4403h
  7587.     BX = file handle referencing character device
  7588.     CX = number of bytes to write
  7589.     DS:DX -> data to write
  7590. Return: CF clear if successful
  7591.         AX = number of bytes actually written
  7592.     CF set on error
  7593.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7594. Notes:    format of data is driver-specific (see below for some specific cases)
  7595.     if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
  7596.       KEYSTACK.SYS driver will push the specified characters on the
  7597.       keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
  7598.       driver will push the characters onto the keyboard stack
  7599. SeeAlso: AX=4400h,AX=4402h,AX=4405h,INT 2F/AX=122Bh,INT 2F/AX=D44Dh
  7600. SeeAlso: INT 2F/AX=D44Fh
  7601. --------c-214403-----------------------------
  7602. INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
  7603.     AX = 4403h
  7604.     BX = handle for device "SMARTAAR"
  7605.     CX = number of bytes to write
  7606.     DS:DX -> SMARTDRV control block (see #0743)
  7607. Return: CF clear if successful
  7608.         AX = number of bytes actually written
  7609.         0000h if control block too small for given command
  7610.     CF set on error
  7611.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7612. SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
  7613.  
  7614. (Table 0742)
  7615. Values for SMARTDRV function code:
  7616.  00h    flush cache
  7617.  01h    flush and discard cache
  7618.  02h    disable caching (flushes and discards cache first)
  7619.  03h    enable caching
  7620.  04h    control write caching
  7621.  05h    set flushing tick count
  7622.  06h    lock cache contents
  7623.  07h    unlock cache contents
  7624.  08h    set flush-on-reboot flag
  7625.  09h    unused
  7626.  0Ah    control full-track caching
  7627.  0Bh    reduce cache size
  7628.  0Ch    increase cache size
  7629.  0Dh    set INT 13 chain address
  7630.  
  7631. Format of SMARTDRV control block:
  7632. Offset    Size    Description    (Table 0743)
  7633.  00h    BYTE    function code (see #0742)
  7634. ---functions 00h-03h,06h,07h---
  7635.  no additional fields
  7636. ---function 04h---
  7637.  01h    BYTE    write caching control action
  7638.         00h turn off write-through
  7639.         01h turn on write-through
  7640.         02h turn off write buffering (also flushes cache)
  7641.         03h turn on write buffering (also flushes cache)
  7642. ---function 05h---
  7643.  01h    WORD    number of timer ticks between cache flushes
  7644. ---function 08h---
  7645.  01h    BYTE    new flush-on-reboot flag (00h off, 01h on)
  7646. ---function 0Ah---
  7647.  01h    BYTE    full-track writes are
  7648.         00h not cached
  7649.         01h cached
  7650. ---functions 0Bh,0Ch---
  7651.  01h    WORD    number of 16K pages by which to increase/reduce cache size
  7652. ---function 0Dh---
  7653.  01h    DWORD    new address to which to chain on INT 13
  7654. Note:    the previous address is not preserved
  7655. --------d-214403-----------------------------
  7656. INT 21 - CD-ROM device driver - IOCTL OUTPUT
  7657.     AX = 4403h
  7658.     BX = file handle referencing character device for CD-ROM driver
  7659.     CX = number of bytes to write
  7660.     DS:DX -> control block (see #0744)
  7661. Return: CF clear if successful
  7662.         AX = number of bytes actually written
  7663.     CF set on error
  7664.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7665. SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
  7666.  
  7667. Format of CR-ROM control block:
  7668. Offset    Size    Description    (Table 0744)
  7669.  00h    BYTE    function code
  7670.         00h eject disk
  7671.         01h lock/unlock door
  7672.         02h reset drive
  7673.         03h control audio channel
  7674.         04h write device control string
  7675.         05h close tray
  7676. ---functions 00h,02h,05h---
  7677.  no further fields
  7678. ---function 01h---
  7679.  01h    BYTE    lock function
  7680.         00h unlock door
  7681.         01h lock door
  7682. ---function 03h---
  7683.  01h    BYTE    input channel (0-3) for output channel 0
  7684.  02h    BYTE    volume for output channel 0
  7685.  03h    BYTE    input channel (0-3) for output channel 1
  7686.  04h    BYTE    volume for output channel 1
  7687.  05h    BYTE    input channel (0-3) for output channel 2
  7688.  06h    BYTE    volume for output channel 2
  7689.  07h    BYTE    input channel (0-3) for output channel 3
  7690.  08h    BYTE    volume for output channel 3
  7691. Note:    output channels 0 and 1 are left and right, 2 and 3 are left prime and
  7692.       right prime; a volume of 00h is off
  7693. ---function 04h---
  7694.  01h  N BYTEs    bytes to send directly to the CD-ROM drive without
  7695.           interpretation
  7696. --------d-214403-----------------------------
  7697. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  7698.     AX = 4403h
  7699.     BX = handle for device "SCSITAPE"
  7700.     CX = number of bytes to write
  7701.     DS:DX -> SCSITAPE control block (see #0745)
  7702. Return: CF clear if successful
  7703.         AX = number of bytes actually written
  7704.     CF set on error
  7705.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7706. SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
  7707.  
  7708. Format of SCSITAPE control block:
  7709. Offset    Size    Description    (Table 0745)
  7710.  00h    WORD    command type
  7711.         'F' Format (argument 1 = interleave, argument 2 = format type)
  7712.         'E' Erase
  7713.         'R' Rewind
  7714.         'L' Load
  7715.         'N' No Load
  7716.         'S' Space (argument 1 = count, argument 2 = type)
  7717.         'M' File Mark (argument 1 = count)
  7718.         'A' Reassign
  7719.  02h    WORD    argument 1
  7720.  04h    WORD    argument 2
  7721.  06h    WORD    segment of command buffer
  7722.  08h    WORD    offset of command buffer
  7723.  0Ah    WORD    length of command buffer
  7724. --------E-214403-----------------------------
  7725. INT 21 U - AI Architects - OS/x86??? - API
  7726.     AX = 4403h
  7727.     BX = handle for device "AIA_OS"
  7728.     CX = number of bytes to write (ignored)
  7729.     DS:DX -> 12-byte buffer (see #0746), first byte is command:
  7730.           81h installation check
  7731.           82h get API entry point
  7732.           84h uninstall
  7733. Return: CF clear if successful
  7734.         AX = number of bytes actually written
  7735.         DS:DX buffer filled
  7736.     CF set on error
  7737.         AX = error code (01h,05h,06h,0Ch,0Dh) (see #0885 at AH=59h)
  7738. Notes:    these functions are only available if the DOS extender was loaded as a
  7739.       device driver in CONFIG.SYS
  7740.     called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
  7741. SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
  7742. Index:    installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
  7743.  
  7744. Format of buffer on return:
  7745. Offset    Size    Description    (Table 0746)
  7746.  00h  4 BYTEs    signature "IABH"
  7747. ---if function 81h---
  7748.  (no additional fields)
  7749. ---if function 82h---
  7750.  04h    DWORD    pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
  7751. ---if function 84h---
  7752.  04h    WORD    success indicator
  7753.  06h    WORD    segment of ???
  7754.  08h    WORD    segment of ??? memory block to free if nonzero
  7755.  0Ah    WORD    segment of ??? memory block to free if nonzero
  7756. --------V-214403-----------------------------
  7757. INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
  7758.     AX = 4403h
  7759.     BX = file handle for device "PGS1600$"
  7760.     CX = 0018h (size of buffer)
  7761.     DS:DX -> configuration buffer (see #0704 at AX=4402h"PGS1600")
  7762. Return: CF clear if successful
  7763.         AX = number of bytes actually written
  7764.     CF set on error
  7765.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7766. Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
  7767.       display adapter, which provides a 1600x1200 monochrome display as
  7768.       well as one of two emulations, MDA or CGA.
  7769. SeeAlso: AX=4402h"PGS1600"
  7770. --------N-214403-----------------------------
  7771. INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
  7772.     AX = 4403h
  7773.     BX = file handle referencing device "$IPCUST"
  7774.     CX, DS:DX ignored
  7775. Return: CF clear if successful
  7776.         AX destroyed
  7777.     CF set on error
  7778.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7779. Notes:    there are a total of 378h bytes of configuration data for IPCUST.SYS
  7780.       version 2.05.     If less than the entire data is read or written,
  7781.       the next read/write continues where the previous one ended; this
  7782.       call and AX=4402h both reset the location at which the next
  7783.       operation starts to zero
  7784.     v2.1+ uses a new configuration method, but allows the installation
  7785.       of IPCUST.SYS for backward compatibility with other software which
  7786.       must read the PC/TCP configuration
  7787. SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
  7788. --------V-214403-----------------------------
  7789. INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
  7790.     AX = 4403h
  7791.     BX = file handle referencing device "CPQ_MGES"
  7792.     DS:DX -> request packet (see #0747)
  7793.     CX ignored
  7794. Return: CF clear if successful
  7795.         AX destroyed
  7796.         data buffer filled (if applicable)
  7797.         first word of request packet set to number of bytes of data
  7798.           available (amount returned is smaller of this and requested
  7799.           amount)
  7800.     CF set on error
  7801.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7802. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  7803. SeeAlso: AX=4403h"RGDI"
  7804.  
  7805. Format of Compaq AG1024.SYS request packet:
  7806. Offset    Size    Description    (Table 0747)
  7807.  00h    WORD    function
  7808.         0000h get ??? (26h bytes)
  7809.         0001h get ??? (36h bytes)
  7810.         0002h set ??? (same as returned by function 0001h)
  7811.         0003h get ??? (6 bytes)
  7812.         0004h get ???
  7813.         0005h get ???
  7814.         0006h get ??? (10h bytes)
  7815.         0007h set ??? (same as returned by function 0006h)
  7816. ---functions 00h-03h,06h,07h---
  7817.  02h    WORD    size of data buffer
  7818.  04h    DWORD    -> buffer for function's data
  7819.  ---functions 04h,05h---
  7820.  02h    WORD    ???
  7821.  04h    WORD    size of data buffer
  7822.  06h    DWORD    -> buffer to receive data
  7823. --------V-214403-----------------------------
  7824. INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
  7825.     AX = 4403h
  7826.     BX = file handle referencing device "$$$$RGDI"
  7827.     DS:DX -> request packet (see #0748)
  7828.     CX ignored
  7829. Return: CF clear if successful
  7830.         AX destroyed
  7831.         data buffer filled (if applicable)
  7832.         first word of request packet set to number of bytes of data
  7833.           available (amount returned is smaller of this and requested
  7834.           amount)
  7835.     CF set on error
  7836.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7837. Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
  7838. SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
  7839.  
  7840. Format of Compaq AG1024.SYS request packet:
  7841. Offset    Size    Description    (Table 0748)
  7842.  00h    WORD    function
  7843.         0000h get entry points
  7844.         0001h get ???
  7845.  02h    DWORD    address of buffer for returned data
  7846. --------m-214403SF01-------------------------
  7847. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
  7848.     AX = 4403h subfn 01h
  7849.     BX = handle for device "386MAX$$"
  7850.     DS:DX -> BYTE 01h
  7851.     CX ignored
  7852. Return: DS:DX -> BYTE status (00h = successful)
  7853.     CF clear if successful
  7854.         AX destroyed
  7855.     CF set on error
  7856.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7857. Note:    this function will fail if any EMS or UMBs are in use
  7858. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
  7859. --------m-214403SF02-------------------------
  7860. INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
  7861.     AX = 4403h subfn 02h
  7862.     BX = handle for device "386MAX$$"
  7863.     DS:DX -> BYTE 02h
  7864.     CX ignored
  7865. Return: DS:DX -> BYTE status (00h = successful)
  7866.     CF clear if successful
  7867.         AX destroyed
  7868.     CF set on error
  7869.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7870. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  7871. --------m-214403SF03-------------------------
  7872. INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
  7873.     AX = 4403h subfn 03h
  7874.     BX = handle for device "386MAX$$"
  7875.     CX = number of bytes to copy (up to size of state buffer)
  7876.     DS:DX -> BYTE 03h followed by state buffer
  7877.           (see #0687 at AX=4402h"386MAX")
  7878. Return: CF clear if successful
  7879.         AX = number of bytes actually written
  7880.     CF set on error
  7881.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7882. Note:    the first byte of the buffer must be either 01h, 02h, or 03h
  7883.       (specifying the version of the state record) and the buffer must
  7884.       contain CX bytes AFTER the initial byte
  7885. SeeAlso: AX=4402h"386MAX"
  7886. --------m-214403SF05-------------------------
  7887. INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
  7888.     AX = 4403h subfn 05h
  7889.     BX = handle for device "386MAX$$"
  7890.     DS:DX -> BYTE 05h
  7891.     CX ignored
  7892. Return: CF clear if successful
  7893.         AX destroyed
  7894.     CF set on error
  7895.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7896. Desc:    specifies that 386MAX will only shift from AUTO to ON mode on standard
  7897.       EMS calls INT 67/AH=40h-5Dh
  7898. SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
  7899. --------m-214403SF06-------------------------
  7900. INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
  7901.     AX = 4403h subfn 06h
  7902.     BX = handle for device "386MAX$$"
  7903.     DS:DX -> BYTE 06h
  7904.     CX ignored
  7905. Return: CF clear if successful
  7906.         AX destroyed
  7907.     CF set on error
  7908.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7909. Desc:    specified that 386MAX should shift from AUTO to ON mode on any INT 67
  7910.       call other than INT 67/AH=3Fh
  7911. SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
  7912. --------n-214403-----------------------------
  7913. INT 21 U - PenDOS PENDEV.SYS - ???
  7914.     AX = 4403h
  7915.     BX = file handle for device "$$PENDOS" or "$$PD_REG"
  7916.     CX = size of buffer
  7917.     DS:DX -> buffer containing ???
  7918. Return: CF clear if successful
  7919.         buffer filled
  7920.     CF set on error
  7921.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7922. Program: A limited version of PenDOS by Communication Intelligence Corporation,
  7923.       which provides pen capability to keyboard-based programs, is bundled
  7924.       with IBM DOS 6.1
  7925. Note:    this call sets the WORD at offset 1Ah into the device driver request
  7926.       header used to call the driver to 0000h.
  7927. SeeAlso: AX=4402h"PENDEV.SYS"
  7928. --------D-214404-----------------------------
  7929. INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
  7930.     AX = 4404h
  7931.     BL = drive number (00h = default, 01h = A:, etc.)
  7932.     CX = number of bytes to read
  7933.     DS:DX -> buffer
  7934. Return: CF clear if successful
  7935.         AX = number of bytes actually read
  7936.     CF set on error
  7937.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7938. Note:    format of data is driver-specific
  7939. SeeAlso: AX=4402h,AX=4405h,INT 2F/AX=122Bh
  7940. --------k-214404-----------------------------
  7941. INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
  7942.     AX = 4404h
  7943.     BL = drive number (00h = default, 01h = A:, etc.)
  7944.     CX = 0004h
  7945.     DS:DX -> DWORD buffer to receive device driver address
  7946. Return: buffer filled with pointer into Stacker device driver (see #1341):
  7947.       driver + 19h if Stacker Anywhere controls this drive
  7948.       driver + 1Ah if Stacker controls this drive
  7949.       unchanged else
  7950. Notes:    in addition to returning the address of the Stacker device driver,
  7951.       this call also sets the volume number at offset 58h in the device
  7952.       driver (see #1341 at INT 25/AX=CDCDh)
  7953.     Stacker Anywhere does not link its built-in device driver into
  7954.       the standard device driver chain, but it can be found via CDS/DPB
  7955.     this call can be used as an installation check for all versions of
  7956.       Stacker and Stacker Anywhere to avoid the INT 25 call
  7957. SeeAlso: AX=4408h,AX=440Eh,AH=52h,INT 25/AX=CDCDh
  7958. --------k-214404-----------------------------
  7959. INT 21 - Stacker - GET STACVOL FILE SECTORS
  7960.     AX = 4404h
  7961.     BL = drive number (0 is current drive)
  7962.     CX = byte count (i.e., 200h = 1 sector)
  7963.     DS:DX -> buffer (see #0749)
  7964. Return: Data Buffer contains the number of sectors requested from the
  7965.       STACVOL physical file for the drive specified.
  7966.  
  7967. Format of Stacker buffer:
  7968. Offset    Size    Description    (Table 0749)
  7969.  00h    WORD    01CDh
  7970.  02h    WORD    sector count
  7971.  04h    DWORD    number of starting sector
  7972.  08h    DWORD    far pointer to Data Buffer
  7973. --------k-214404-----------------------------
  7974. INT 21 - DUBLDISK.SYS v2.6 - GET INFO
  7975.     AX = 4404h
  7976.     BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
  7977.     CX = number of bytes (000Ah-0014h, call ignored otherwise)
  7978.     DS:DX -> data record (see #0750)
  7979. Return: CF clear if successful
  7980.         AX = number of bytes read
  7981.     CF set on error
  7982.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  7983. Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
  7984.       expander by Vertisoft Systems, Inc.
  7985. Note:    the installation check for v2.6 consists of scanning memory for the
  7986.       signature "FAT 2.6  byte:", which is immediately followed by a data
  7987.       table (see #0751)
  7988. BUG:    VOPT (a disk optimizer by Golden Bow Software) assumes that any driver
  7989.       which returns the "correct" number of bytes when the first word of
  7990.       the buffer for the data record contains the signature value 4444h is
  7991.       DoubleDisk; a workaround is for the non-DoubleDisk driver to return
  7992.       no data if the signature is present
  7993. SeeAlso: AX=440Dh
  7994. Index:    installation check;DUBLDISK.SYS
  7995.  
  7996. Format of DUBLDISK data record:
  7997. Offset    Size    Description    (Table 0750)
  7998.  00h    WORD    (call) signature 4444h
  7999.  02h    BYTE    (call) function
  8000.             00h ???
  8001.             01h ???
  8002. ---function 00h---
  8003.  02h    BYTE    (ret) ???
  8004.  03h    BYTE    (ret) ???
  8005. ---function 01h---
  8006.  02h    WORD    (ret) 4444h
  8007.  04h    WORD    allocation unit size???
  8008.  06h    WORD    ???
  8009.  08h    WORD    ???
  8010.  0Ah    BYTE    ???
  8011.  
  8012. Format of DUBLDISK signature data table:
  8013. Offset    Size    Description    (Table 0751)
  8014.  00h  5 BYTEs    ???
  8015.  05h    BYTE    first drive number
  8016.  06h    BYTE    number of drives
  8017.  07h    ???
  8018. --------k-214404-----------------------------
  8019. INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8020.     AX = 4404h
  8021.     BL = drive number (00h = default, 01h = A:, etc)
  8022.     CX = 000Ah (size of DSPACKET structure)
  8023.     DS:DX -> DSPACKET structure (see #0752)
  8024. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8025.         AX = number of bytes actually transferred
  8026.     CF set on error
  8027.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8028. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8029.  
  8030. Format of DoubleSpace DSPACKET structure:
  8031. Offset    Size    Description    (Table 0752)
  8032.  00h    WORD    signature 444Dh ("DM")
  8033.  02h    BYTE    command code
  8034.         46h ('F') flush internal caches
  8035.         49h ('I') flush and invalidate internal caches
  8036.  03h    WORD    result code
  8037.         (ret) 4F4Bh ("OK") if successful, else unchanged
  8038.  05h  5 BYTEs    padding
  8039. --------k-214404-----------------------------
  8040. INT 21 - DBLSPACE.BIN v6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
  8041.     AX = 4404h
  8042.     BL = drive number (00h = default, 01h = A:, etc)
  8043.     CX = size of DSPACKET structure (ignored in DOS 6.2)
  8044.     DS:DX -> DSPACKET structure (see #0753)
  8045. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8046.         AX = number of bytes actually transferred
  8047.     CF set on error
  8048.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8049. SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8050.  
  8051. Format of DoubleSpace DSPACKET structure:
  8052. Offset    Size    Description    (Table 0753)
  8053.  00h    WORD    signature 444Dh ("DM")
  8054.  02h    BYTE    command code
  8055.         53h ('S') get ??? for specified drive
  8056.  03h    WORD    result code
  8057.         (ret) 4F4Bh ("OK") if successful, else unchanged
  8058.  05h    DWORD    (ret) pointer to 96-byte ??? data
  8059.  09h    DWORD    (ret) pointer to ??? data
  8060.  0Dh  3 BYTEs    reserved
  8061. ----------214404-----------------------------
  8062. INT 21 U - DoubleTools v1.0 - GET ???
  8063.     AX = 4404h
  8064.     BL = drive number (00h = default, 01h = A:, etc)
  8065.     CX = 0006h
  8066.     DS:DX -> DoubleTools structure (see #0754)
  8067. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8068.         AX = number of bytes actually transferred
  8069.     CF set on error
  8070.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8071. Note:    the Transporter device driver has the signature 55h 61h 50h 74h
  8072.       ("DaPt") twelve bytes after it beginning
  8073.     
  8074. Format of DoubleTools structure:
  8075. Offset    Size    Description    (Table 0754)
  8076.  00h    WORD    (call) signature 55h AAh
  8077.         (ret) signature 78h 70h ("xp")
  8078.  02h    WORD    (call) signature 52h 16h
  8079.         (ret) ???
  8080.  04h    WORD    (ret) segment of driver's DS (same as its PSP)
  8081. --------d-214404-----------------------------
  8082. INT 21 U - xDISK v3.31 - CONFIGURE
  8083.     AX = 4404h
  8084.     BL = drive number (00h = default, 01h = A:, etc)
  8085.     CX = 0047h (length of version string)
  8086.     DS:DX -> 79-byte buffer for version string and ???
  8087.     DS:0081h = commandline containing new switches for driver
  8088. Return: CF clear if successful
  8089.         AX = number of bytes actually transferred
  8090.     CF set on error
  8091.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8092. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8093. SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8094. --------c-214404-----------------------------
  8095. INT 21 - COMBI-disk v1.13 - GET DATA RECORD
  8096.     AX = 4404h
  8097.     BL = drive number (00h = default, 01h = A:, etc)
  8098.     CX = 0032h (length of data packet)
  8099.     DS:DX -> buffer for data packet (see #0755)
  8100. Return: CF clear if successful
  8101.         AX = number of bytes actually transferred
  8102.     CF set on error
  8103.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8104. Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
  8105.       single pool of memory by Vadim V. Vlasov
  8106. Note:    the installation check consists of scanning the valid drives for one
  8107.       which returns a correctly-sized data packet with the proper
  8108.       signature in the first field
  8109. SeeAlso: AX=4405h"COMBI"
  8110. Index:    installation check;COMBI-disk
  8111.  
  8112. Format of COMBI-disk data packet:
  8113. Offset    Size    Description    (Table 0755)
  8114.  00h  6 BYTEs    ASCIZ signature "COMBI"
  8115.  06h    WORD    version (high byte = major, low = decimal minor version)
  8116.  08h    BYTE    current options (see below)
  8117.  09h    BYTE    sectors per allocation block
  8118.  0Ah    WORD    maximum buffer in KB
  8119.  0Ch    WORD    current buffer in KB (less than max if XMS memory being lent)
  8120.  0Eh    WORD    total number of allocation blocks
  8121.  10h    WORD    current number of allocation blocks
  8122.  12h    WORD    number of blocks being used by RAM disk
  8123.  14h    WORD    number of blocks being used by cache or unused
  8124.  16h    WORD    number of dirty cache blocks
  8125.  18h    WORD    number of blocks which could not be written out due to errors
  8126.  1Ah    WORD    total number of read requests
  8127.  1Ch    WORD    total number of sectors read
  8128.  1Eh    WORD    number of BIOS read requests (cache misses)
  8129.  20h    WORD    number of sectors read via BIOS (cache misses)
  8130.  22h    WORD    total number of write requests
  8131.  24h    WORD    total number of sectors written
  8132.  26h    WORD    number of BIOS write requests
  8133.  28h    WORD    number of sectors written via BIOS
  8134.  2Ah    WORD    number of RAM disk read requests
  8135.  2Ch    WORD    number of sectors read from RAM disk
  8136.  2Eh    WORD    number of RAM disk write requests
  8137.  30h    WORD    number of sectors written to RAM disk
  8138. --------d-214404-----------------------------
  8139. INT 21 - SFS v1.00 - GET CONFIGURATION INFORMATION
  8140.     AX = 4404h
  8141.     BL = drive number (00h = default, 01h = A:, etc)
  8142.     CX = 001Ah (length of data packet)
  8143.     DS:DX -> buffer for data packet (see #0756)
  8144. Return: CF clear if successful
  8145.         AX = number of bytes actually transferred
  8146.     CF set on error
  8147.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8148. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  8149.       Peter C. Gutmann
  8150. SeeAlso: AX=4405h"SFS"
  8151.  
  8152. Format of SFS data packet:
  8153. Offset    Size    Description    (Table 0756)
  8154.  00h  4 BYTEs    signature string "SFS1"
  8155.  04h    WORD    SFS unit number (0-based)
  8156.  06h    WORD    drive on which the SFS volume is mounted
  8157.  08h    DWORD    sector offset of logical volume from start of physical volume
  8158.         0 if logical volume = physical volume
  8159.  0Ch    WORD    flag: 00h = no disk mounted, 01h = disk mounted
  8160.  0Eh    WORD    flag: 00h read/write, 01h read-only
  8161.  10h    WORD    quick-unmount hotkey (high byte = shift state, low = scan code)
  8162.  12h    WORD    auto-unmount time in minutes, or 0000h if already expired, or
  8163.         FFFFh if not set
  8164.  14h    WORD    time in minutes remaining before auto-unmount
  8165.  16h    WORD    internal driver check code
  8166.         0000h no error
  8167.         0001h driver consistency check failed
  8168.         0002h unit consistency check failed
  8169.  18h    WORD    disk access mode
  8170.         0000h BIOS
  8171.         0001h IDE direct access
  8172.         0002h SCSI direct access
  8173. --------D-214405-----------------------------
  8174. INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
  8175.     AX = 4405h
  8176.     BL = drive number (00h = default, 01h = A:, etc)
  8177.     CX = number of bytes to write
  8178.     DS:DX -> data to write
  8179. Return: CF clear if successful
  8180.         AX = number of bytes actually written
  8181.     CF set on error
  8182.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8183. Note:    format of data is driver-specific
  8184. SeeAlso: AX=4403h,AX=4404h,INT 2F/AX=122Bh
  8185. --------d-214405-----------------------------
  8186. INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
  8187.     AX = 4405h
  8188.     BX = drive number (00h = default, 01h = A:, etc)
  8189.     CX = number of bytes to write
  8190.     DS:DX -> SCSIDISK control block (see also #0745 at AX=4403h"ST-01")
  8191. Return: CF clear if successful
  8192.         AX = number of bytes actually written
  8193.     CF set on error
  8194.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8195. SeeAlso: AX=4403h"ST-01"
  8196. --------k-214405-----------------------------
  8197. INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
  8198.     AX = 4405h
  8199.     BL = drive number (00h = default, 01h = A:, etc)
  8200.     CX = 000Ah (size of DSPACKET structure)
  8201.     DS:DX -> DSPACKET structure (see #0757)
  8202. Return: CF clear if IOCTL successful -- check DSPACKET for actual status
  8203.         AX = number of bytes actually transferred
  8204.     CF set on error
  8205.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8206. Note:    this call is identical to the documented AX=4404h
  8207. SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
  8208.  
  8209. Format of DoubleSpace DSPACKET structure:
  8210. Offset    Size    Description    (Table 0757)
  8211.  00h    WORD    signature 444Dh ("DM")
  8212.  02h    BYTE    command code
  8213.         46h ('F') flush internal caches
  8214.         49h ('I') flush and invalidate internal caches
  8215.  03h    WORD    result code
  8216.         (ret) 4F4Bh ("OK") if successful, else unchanged
  8217.  05h  5 BYTEs    padding
  8218. --------d-214405-----------------------------
  8219. INT 21 U - xDISK v3.31 - ???
  8220.     AX = 4405h
  8221.     BL = drive number (00h = default, 01h = A:, etc)
  8222.     CX = number of bytes to write
  8223.     DS:DX -> buffer containing version string
  8224.     ???
  8225. Return: CF clear if successful
  8226.         AX = number of bytes actually transferred
  8227.     CF set on error
  8228.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8229. Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
  8230. SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
  8231. --------d-214405-----------------------------
  8232. INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
  8233.     AX = 4405h
  8234.     BL = drive number (00h = default, 01h = A:, etc) for RAM disk
  8235.     CX = number of bytes to write
  8236.     DS:DX -> buffer containing command packet (see #0759)
  8237. Return: CF clear if successful
  8238.         AX = number of bytes actually transferred
  8239.     CF set on error
  8240.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8241. SeeAlso: AX=4404h"COMBI"
  8242.  
  8243. (Table 0758)
  8244. Values for COMBI-disk command code:
  8245.  80h    flush cache
  8246.  81h    change options byte
  8247.  82h    shrink memory
  8248.  83h    expand memory
  8249.  84h    get dirty block information
  8250.  85h    reset write errors
  8251.  86h    reset counters
  8252.  
  8253. Format of COMBI-disk command packet:
  8254. Offset    Size    Description    (Table 0759)
  8255.  00h    WORD    version
  8256.  02h    BYTE    command code (see #0758)
  8257. ---command code 80h---
  8258.  no additional fields
  8259. ---command code 81h---
  8260.  03h    BYTE    new options byte (see #0760)
  8261. ---command code 82h---
  8262.  03h    WORD    number of KB to release
  8263. ---command code 83h---
  8264.  03h    WORD    number of KB to expand
  8265. ---command code 84h---
  8266.  03h    DWORD    -> buffer for block info (see #0761)
  8267. ---command code 85h---
  8268.  03h    DWORD    block ID
  8269. ---command code 86h---
  8270.  03h    BYTE    which counters to reset
  8271.         bit 0: hard disk read counts
  8272.         bit 1: hard disk write counts
  8273.         bit 2: RAM disk read/write counts
  8274. Note:    multiple commands may be placed in a single packet by stringing
  8275.       together as many command/argument pairs as desired
  8276.  
  8277. Bitfields for COMBI-disk options byte:
  8278. Bit(s)    Description    (Table 0760)
  8279.  0    cache off
  8280.  1    cache frozen
  8281.  2    write caching enabled
  8282.  3    delayed writing disabled
  8283.  5    fix memory allocation (no XMS lending)
  8284.  6    no 'sector not found' error
  8285.  
  8286. Format of COMBI-disk block info:
  8287. Offset    Size    Description    (Table 0761)
  8288.  00h    DWORD    block ID
  8289.  04h    BYTE    bitmask of valid sectors in block
  8290.  05h    BYTE    bitmask of dirty sectors in block
  8291.  06h    BYTE    last error returned by BIOS
  8292.  07h    BYTE    number of errors
  8293. --------D-214405-----------------------------
  8294. INT 21 - SFS v1.00 - DRIVER CONTROL
  8295.     AX = 4405h
  8296.     BL = drive number (00h = default, 01h = A:, etc)
  8297.     CX = number of bytes to write
  8298.     DS:DX -> data to write (see #0763)
  8299. Return: CF clear if successful
  8300.         AX = number of bytes actually written
  8301.     CF set on error
  8302.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8303. Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
  8304.       Peter C. Gutmann
  8305. SeeAlso: AX=4404h"SFS"
  8306.  
  8307. (Table 0762)
  8308. Values for SFS control function:
  8309.  00h    "PACKET_SET_DISKINFO"     set disk parameters
  8310.  01h    "PACKET_SET_KEYINFO"     set keying information
  8311.  02h    "PACKET_SET_READONLY"     select read/write or read-only
  8312.  03h    "PACKET_SET_DRIVENO"     set drive number to mount
  8313.  04h    "PACKET_SET_MOUNTSTATUS" set mount status
  8314.  05h    "PACKET_SET_UNMOUNT"     set/clear quick-unmount hotkey
  8315.  06h    "PACKET_SET_TIMEOUT"     set/clear auto-unmount timeout
  8316.  
  8317. Format of SFS control data packet:
  8318. Offset    Size    Description    (Table 0763)
  8319.  00h    WORD    signature 4330h ('C0')
  8320.  02h    WORD    function (see #0762)
  8321. ---function 00h---
  8322.  04h    WORD    sector size in bytes
  8323.  06h    BYTE    sectors per cluster
  8324.  07h    WORD    number of boot sectors
  8325.  09h    BYTE    number of copies of FAT
  8326.  0Ah    WORD    size of root directory in entries
  8327.  0Ch    WORD    number of sectors on disk, 16-bit
  8328.  0Eh    BYTE    media descriptor byte
  8329.  0Fh    WORD    sectors per FAT
  8330.  11h    WORD    sectors per track
  8331.  13h    WORD    number of heads
  8332.  15h    DWORD    number of hidden sectors
  8333.  19h    DWORD    number of sectors on disk, 32-bit
  8334. ---function 01h---
  8335.  04h 20 BYTEs    master IV for encrypted disk
  8336.  18h 64 BYTEs    NDC/SHS keying information
  8337. ---function 02h---
  8338.  04h    WORD    read-only state: 00h read-only, 01h read/write
  8339. ---function 03h---
  8340.  04h    WORD    drive number (see #0764)
  8341.  06h    DWORD    sector offset of logical volume from start of physical volume
  8342.         0 if logical volume = physical volume
  8343. ---function 04h---
  8344.  04h    WORD    mount status (00h unmounted, 01h mounted)
  8345. ---function 05h---
  8346.  04h    WORD    hotkey (high byte = shift state, low byte = scan code or 00h)
  8347.         0000h to disable hotkey
  8348. ---function 06h---
  8349.  04h    WORD    timeout in minutes before automatic unmount
  8350.         0000h to disable auto-unmount
  8351. Notes:    the data for function 00h corresponds to a DOS BPB (see AH=53h)
  8352.     functions 00h, 01h, and 03h automatically unmount the encrypted drive
  8353.     unmounting a drive with function 04h also destroys the encryption
  8354.       information in the driver and forces all dirty buffers to be flushed
  8355.  
  8356. Bitfields for SFS drive number:
  8357. Bit(s)    Description    (Table 0764)
  8358.  15-12    drive access mode
  8359.     0000 BIOS access
  8360.     0001 direct IDE access
  8361.     0010 direct SCSI access
  8362. ---if BIOS access---
  8363.  11-8    unused (0)
  8364.  7-0    BIOS drive number
  8365. ---if IDE access---
  8366.  11-8    unused (0)
  8367.  7-0    IDE drive number
  8368. ---if SCSI access---
  8369.  11-8    SCSI host number
  8370.  7-4    SCSI target ID
  8371.  3-0    SCSI logical unit number
  8372. --------D-214406-----------------------------
  8373. INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
  8374.     AX = 4406h
  8375.     BX = file handle
  8376. Return: CF clear if successful
  8377.         AL = input status
  8378.         00h not ready (device) or at EOF (file)
  8379.         FFh ready
  8380.     CF set on error
  8381.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8382. Note:    files may not register as being at EOF if positioned there by AH=42h
  8383. SeeAlso: AX=4407h,INT 2F/AX=122Bh
  8384. --------D-214407-----------------------------
  8385. INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
  8386.     AX = 4407h
  8387.     BX = file handle
  8388. Return: CF clear if successful
  8389.         AL = input status
  8390.         00h not ready
  8391.         FFh ready
  8392.     CF set on error
  8393.         AX = error code (01h,05h,06h,0Dh) (see #0885 at AH=59h)
  8394. Note:    for DOS 2+, files are always ready for output, even if the disk is
  8395.       full or no media is in the drive
  8396. SeeAlso: AX=4406h,INT 2F/AX=122Bh
  8397. --------D-214408-----------------------------
  8398. INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
  8399.     AX = 4408h
  8400.     BL = drive number (00h = default, 01h = A:, etc)
  8401. Return: CF clear if successful
  8402.         AX = media type (0000h removable, 0001h fixed)
  8403.     CF set on error
  8404.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  8405. Note:    in addition to the normal operation, if Stacker is installed, this
  8406.       call also sets the volume number at offset 58h in the Stacker
  8407.       device driver (except under DR-DOS 3.41-5.0, which do not pass
  8408.       through this call to the driver; use AX=440Eh instead)
  8409.       (see AX=4404h"Stacker",AX=440Eh,INT 25/AX=CDCDh)
  8410. SeeAlso: AX=4400h,AX=4404h"Stacker",AX=4409h,INT 2F/AX=122Bh
  8411. --------D-214409-----------------------------
  8412. INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
  8413.     AX = 4409h
  8414.     BL = drive number (00h = default, 01h = A:, etc)
  8415. Return: CF clear if successful
  8416.         DX = device attribute word
  8417.         bit 15: drive is SUBSTituted
  8418.         bit 12: drive is remote
  8419.         bit  9: direct I/O not allowed
  8420.     CF set on error
  8421.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  8422. Note:    on local drives, DX bits not listed above are the attribute word from
  8423.       the device driver header (see #0858 at AH=52h); for remote drives,
  8424.       the other bits appear to be undefined for DOS versions prior to 5.0
  8425.       (they are all cleared in DOS 5+)
  8426.     checking whether DX=0800h on return appears to be a fairly reliable
  8427.       method for detecting Microsoft's RAMDRIVE, though not for other
  8428.       ramdisks (there appears to be no simple yet foolproof method for
  8429.       detecting ramdisks, although the presence of only a single copy of
  8430.       the FAT and only a single head on non-removable devices is a fairly
  8431.       good indicator)
  8432. SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
  8433. --------D-21440A-----------------------------
  8434. INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
  8435.     AX = 440Ah
  8436.     BX = handle
  8437. Return: CF clear if successful
  8438.         DX = attribute word (as stored in SFT)
  8439.         bit 15: set if remote
  8440.         bit 14: date/time not set on close
  8441.     CF set on error
  8442.         AX = error code (01h,06h) (see #0885 at AH=59h)
  8443. Notes:    if file is remote, Novell Advanced NetWare 2.0 returns the number of
  8444.       the file server on which the handle is located in CX
  8445.     DR-DOS 3.41 and 5.0 clear all bits of DX except bit 15
  8446. SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
  8447. --------D-21440B-----------------------------
  8448. INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
  8449.     AX = 440Bh
  8450.     CX = pause between retries (default 1)
  8451.     DX = number of retries (default 3)
  8452. Return: CF clear if successful
  8453.     CF set on error
  8454.         AX = error code (01h) (see #0885 at AH=59h)
  8455. Notes:    delay is dependent on processor speed (value in CX specifies number of
  8456.       64K-iteration empty loops to execute)
  8457.     if DX=0000h on entry, the retry count is left unchanged
  8458. SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
  8459. --------D-21440C-----------------------------
  8460. INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
  8461.     AX = 440Ch
  8462.     BX = device handle
  8463.     CH = category code (see #0765)
  8464.     CL = function number (see #0766)
  8465.     DS:DX -> parameter block (see #0767,#0768,#0769,#0770,#0771,#0772)
  8466.     SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8467.     DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
  8468. Return: CF set on error
  8469.         AX = error code (see #0885 at AH=59h)
  8470.     CF clear if successful
  8471.         DS:DX -> iteration count if CL=65h
  8472.         SI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8473.         DI = returned value (European MS-DOS 4.0, OS/2 comp box)
  8474. Note:    DR-DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
  8475.       does not support a retry counter
  8476. SeeAlso: AX=440Dh,INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
  8477. SeeAlso: INT 2F/AX=1A01h
  8478.  
  8479. (Table 0765)
  8480. Values for IOCTL category code:
  8481.  00h    unknown (DOS 3.3+)
  8482.  01h    COMn: (DOS 3.3+)
  8483.  03h    CON (DOS 3.3+)
  8484.  05h    LPTn:
  8485.  9Eh    Media Access Control driver (STARLITE)
  8486.  00h-7Fh reserved for Microsoft
  8487.  80h-FFh reserved for OEM/user-defined
  8488.  
  8489. (Table 0766)
  8490. Values for generic character IOCTL function:
  8491.  00h    MAC driver Bind (STARLITE) (see #0767)
  8492.  45h    set iteration (retry) count (see #0768)
  8493.  4Ah    select code page (see #0769)
  8494.  4Ch    start code-page preparation (see #0770)
  8495.  4Dh    end code-page preparation (see #0771)
  8496.  5Fh    set display information (DOS 4+) (see #0772)
  8497.  65h    get iteration (retry) count
  8498.  6Ah    query selected code page (see #0769)
  8499.  6Bh    query prepare list (see #0773)
  8500.  7Fh    get display information (DOS 4+) (see #0772)
  8501. Note:    bit assignments for function code:
  8502.         bit 7: set to ignore if unsupported, clear to return error
  8503.         bit 6: set if passed to driver, clear if intercepted by DOS
  8504.         bit 5: set if queries data from device, clear if sends command
  8505.         bits 4-0: subfunction
  8506.  
  8507. Format of parameter block for function 00h:
  8508. Offset    Size    Description    (Table 0767)
  8509.  00h  8 BYTEs    ASCIZ signature "STARMAC"
  8510.  08h    WORD    version
  8511.  0Ah    WORD    flags
  8512.         bit 0: media requires connect or listen request before use
  8513.         bit 1: network is a LAN (broadcast/multicast supported)
  8514.         bit 2: point-to-point network
  8515.  0Ch    WORD    handle for use with MAC driver's private interface (filled in
  8516.         by MAC driver)
  8517.  0Eh    WORD    context
  8518.  10h    WORD    approximate speed in KB/sec (filled in by MAC driver)
  8519.  12h    WORD    approximate cost in cents per hour (filled in by MAC driver)
  8520.  14h    WORD    maximum packet size in bytes (filled in by MAC driver)
  8521.  16h    WORD    addressing format (filled in by MAC driver)
  8522.         0000h general addressing
  8523.         0001h Ethernet addressing
  8524.         0002h Token Ring addressing
  8525.         0003h Token Bus addressing
  8526.  18h    DWORD    Send entry point (filled in by MAC driver)
  8527.  1Ch    DWORD    RegisterEventHandler entry point (filled in by MAC driver)
  8528.  20h    DWORD    SetPacketFilter entry point (filled in by MAC driver)
  8529.  24h    DWORD    UnBind entry point (filled in by MAC driver)
  8530.  
  8531. Format of parameter block for function 45h:
  8532. Offset    Size    Description    (Table 0768)
  8533.  00h    WORD    number of times output is attempted before driver assumes
  8534.           device is busy
  8535.  
  8536. Format of parameter block for functions 4Ah and 6Ah:
  8537. Offset    Size    Description    (Table 0769)
  8538.  00h    WORD    length of data
  8539.  02h    WORD    code page ID
  8540.  04h 2N BYTEs    DCBS (double byte character set) lead byte range
  8541.           start/end for each of N ranges (DOS 4.0)
  8542.     WORD    0000h  end of data (DOS 4.0)
  8543.  
  8544. Format of parameter block for function 4Ch:
  8545. Offset    Size    Description    (Table 0770)
  8546.  00h    WORD    flags
  8547.         DISPLAY.SYS = 0000h
  8548.         PRINTER.SYS bit 0 clear to prepare downloaded font, set to
  8549.             prepare cartridge selection
  8550.  02h    WORD    length of remainder of parameter block
  8551.  04h    WORD    number of code pages following
  8552.  06h  N WORDs    code page 1,...,N
  8553.  
  8554. Format of parameter block for function 4Dh:
  8555. Offset    Size    Description    (Table 0771)
  8556.  00h    WORD    length of data
  8557.  02h    WORD    code page ID
  8558.  
  8559. Format of parameter block for functions 5Fh and 7Fh:
  8560. Offset    Size    Description    (Table 0772)
  8561.  00h    BYTE    level (0 for DOS 4.x-6.0)
  8562.  01h    BYTE    reserved (0)
  8563.  02h    WORD    length of following data (14)
  8564.  04h    WORD    control flags
  8565.         bit 0 set for blink, clear for intensity
  8566.         bits 1-15 reserved
  8567.  06h    BYTE    mode type (1=text, 2=graphics)
  8568.  07h    BYTE    reserved (0)
  8569.  08h    WORD    colors
  8570.         0000h = monochrome
  8571.         else N bits per pixel
  8572.  0Ah    WORD    pixel columns
  8573.  0Ch    WORD    pixel rows
  8574.  0Eh    WORD    character columns
  8575.  10h    WORD    character rows
  8576.  
  8577. Format of parameter block for function 6Bh:
  8578. Offset    Size    Description    (Table 0773)
  8579.  00h    WORD    length of following data
  8580.  02h    WORD    number of hardware code pages
  8581.  04h  N WORDs    hardware code pages 1,...,N
  8582.     WORD    number of prepared code pages
  8583.       N WORDs    prepared code pages 1,...,N
  8584. --------d-21440C-----------------------------
  8585. INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
  8586.     AX = 440Ch
  8587.     BX = device handle
  8588.     CH = category code
  8589.         07h tape (ASPITAPE.SYS)
  8590.     CL = function
  8591.         01h "mtop" - perform tape operation
  8592.         02h "mtget" - get tape status
  8593.         03h ignore end-of-tape errors
  8594.         04h enable end-of-tape errors
  8595.     DS:DX -> parameter block (see #0774,#0775)
  8596. Return: CF set on error
  8597.         AX = error code (see #0885 at AH=59h)
  8598.     CF clear if successful
  8599.         DS:DX -> data block
  8600. Notes:    This device driver is a simple DOS interface to the Adaptec Advanced
  8601.       SCSI Programming Interface (ASPI).  It provides the following device
  8602.       names as access to the SCSI tape, 'RMTx' (rewind on close) and
  8603.       'NRMTx' (NO rewind on close) where x can go from 0 to 3.  There may
  8604.       also be the following names 'MTx' and 'NMTx' which default to 1024
  8605.       byte blocks.    The names may also have a '$' appended to try and make
  8606.       them unique from file names of 'RMT0' etc.
  8607.     once opend these devices must be put into RAW mode
  8608. SeeAlso: AX=4402h"ASPI"
  8609.  
  8610. Format of ASPITAPE.SYS mtop parameter block:
  8611. Offset    Size    Description    (Table 0774)
  8612.  00h    WORD    operation code
  8613.         00h "MTWEOF" - write an end-of-file record
  8614.         01h "MTFSF" - forward space file
  8615.         02h "MTBSF" - backward space file
  8616.         03h "MTFSR" - forward space record
  8617.         04h "MTBSR" - backward space record
  8618.         05h "MTREW" - rewind
  8619.         06h "MTOFFL" - rewind and unload
  8620.         07h "MTNOP" - perform TEST UNIT READY
  8621.  02h    DWORD    repetition count
  8622.  
  8623. Format of ASPITAPE.SYS mtget parameter block:
  8624. Offset    Size    Description    (Table 0775)
  8625.  00h    BYTE    ASPI host ID
  8626.  01h    BYTE    SCSI target ID
  8627.  02h    BYTE    SCSI logical unit number
  8628.  03h    BYTE    device parameters
  8629.         bit 0: drive must use fixed-block read and write
  8630.         bit 7: drive is an ASPI device
  8631.  04h    BYTE    current device state (see #0776)
  8632.  05h    BYTE    unit number within driver
  8633.  06h    WORD    fixed block blocksize
  8634.  08h    BYTE    last SCSI status
  8635.  09h    BYTE    last SCSI sense key
  8636.  0Ah    WORD    last SCSI opcode (packed) (see #0777)
  8637.  0Ch    WORD    residual bytes from SCSI opcode
  8638.  
  8639. Bitfields for ASPITAPE.SYS current device state:
  8640. Bit(s)    Description    (Table 0776)
  8641.  0    device currently opened in buffered mode
  8642.  1    drive currently opened in nonbuffered mode
  8643.  2    rewind drive on last close
  8644.  3    drive has been written on
  8645.  4    drive has been read from
  8646.  5    next read will return 0 bytes
  8647.  6    EOM will resemble EOF
  8648.  7    drive may be busy rewinding
  8649.  
  8650. Bitfields for SCSI opcode:
  8651. Bit(s)    Description    (Table 0777)
  8652.  0-7    SCSI operation (SCSI packet byte 0)
  8653.  8-10    SCSI flags (SCSI packet byte 1)
  8654.  11-12    ASPI "Direction Bits" (ASPI SRB byte 3)
  8655. --------D-21440D-----------------------------
  8656. INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
  8657.     AX = 440Dh
  8658.     BL = drive number (00h=default,01h=A:,etc)
  8659.     CH = category code (see #0778)
  8660.     CL = minor code (function) (see #0779)
  8661.     DS:DX -> (DOS) parameter block (see #0780,#0782,#0783,#0784,#0785)
  8662.     SI:DI -> (OS/2 comp box) parameter block (see #0786,#0788,#0789,#0790)
  8663. Return: CF set on error
  8664.         AX = error code (01h,02h) (see #0885 at AH=59h)
  8665.     CF clear if successful
  8666.         DS:DX -> data block if CL=60h or CL=61h
  8667. Notes:    DOS 4.01 seems to ignore the high byte of the number of directory
  8668.       entries in the BPB for diskettes.
  8669.     functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5+
  8670.     the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
  8671.     DR-DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
  8672.       other minor codes return error code 16h
  8673.     some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions
  8674.       prior to 5.0
  8675.     minor code 60h normally produces no I/O except with AutoMount=1 for
  8676.       DBLSPACE/DRVSPACE
  8677. SeeAlso: AX=440Ch,AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh
  8678.  
  8679. (Table 0778)
  8680. Values for block device IOCTL category code:
  8681.  08h    disk drive
  8682.  00h-7Fh reserved for Microsoft
  8683.  80h-FFh reserved for OEM/user-defined
  8684.  
  8685. (Table 0779)
  8686. Values for generic block IOCTL minor code:
  8687.  00h    (OS/2)    \ used to lock/unlock a drive
  8688.  01h    (OS/2)    /
  8689.  40h    set device parameters (see #0780)
  8690.  41h    write logical device track (see #0782)
  8691.  42h    format and verify logical device track (see #0783)
  8692.  46h    (DOS 4+) set volume serial number (see #0785,AH=69h)
  8693.  47h    (DOS 4+) set access flag (see #0786)
  8694.  48h    (Enh. Disk Drive Spec) set media lock state (see #0787,INT 13/AH=45h)
  8695.  49h    (Enh. Disk Drive Spec) eject media in drive (see INT 13/AH=49h)
  8696.  50h    (PCMCIA) attribute memory write
  8697.  51h    (PCMCIA) common memory write
  8698.  52h    (PCMCIA) force media change (DOS 5+ ???) (see #0788)
  8699.  53h    (PCMCIA) erase drive
  8700.  54h    (PCMCIA) erase media
  8701.  56h    (PCMCIA) set erase status callback
  8702.  57h    (PCMCIA) append Card Information Structure (CIS) tuple
  8703.  58h    (PCMCIA) erase CIS tuples
  8704.  60h    get device parameters (see #0780)
  8705.  61h    read logical device track (see #0782)
  8706.  62h    verify logical device track (see #0784)
  8707.  66h    (DOS 4+) get volume serial number (see #0785,AH=69h)
  8708.  67h    (DOS 4+) get access flag (see #0786)
  8709.  68h    (DOS 5+) sense media type (see #0789)
  8710.  70h    (PCMCIA) attribute memory read
  8711.  73h    (PCMCIA) get memory media information (DOS 5+ ???) (see #0790)
  8712.  76h    (PCMCIA) get erase status callback
  8713.  77h    (PCMCIA) get first Card Information Structure (CIS) tuple
  8714.  78h    (PCMCIA) get next CIS tuple
  8715.  7Fh    (PCMCIA) get ??? information (see #0791,#0792)
  8716.  
  8717. Format of parameter block for functions 40h, 60h:
  8718. Offset    Size    Description    (Table 0780)
  8719.  00h    BYTE    special functions
  8720.         bit 0 set if function to use current BPB, clear if Device
  8721.               BIOS Parameter Block field contains new default BPB
  8722.         bit 1 set if function to use track layout fields only
  8723.             must be clear if CL=60h
  8724.         bit 2 set if all sectors in track same size (should be set)
  8725.         bits 3-7 reserved
  8726.  01h    BYTE    device type (see #0781)
  8727.  02h    WORD    device attributes
  8728.         bit 0 set if nonremovable medium
  8729.         bit 1 set if door lock ("changeline") supported
  8730.         bits 2-15 reserved
  8731.  04h    WORD    number of cylinders
  8732.  06h    BYTE    media type
  8733.         for 1.2M drive
  8734.             00h 1.2M disk (default)
  8735.             01h 320K/360K disk
  8736.         F8h for DUBLDISK.SYS v2.6 expanded drives
  8737.         always 00h for other drive types
  8738.  07h 31 BYTEs    device BPB (see #0875 at AH=53h), bytes after BPB offset 1Eh
  8739.           omitted
  8740. ---function 40h only---
  8741.  26h    WORD    number of sectors per track (start of track layout field)
  8742.         (maximum 63)
  8743.  28h  N word pairs: number,size of each sector in track
  8744.  
  8745. (Table 0781)
  8746. Values for device type:
  8747.  00h    320K/360K disk
  8748.  01h    1.2M disk
  8749.  02h    720K disk
  8750.  03h    single-density 8-inch disk
  8751.  04h    double-density 8-inch disk
  8752.  05h    fixed disk
  8753.  06h    tape drive
  8754.  07h    (DOS 3.3+) other type of block device, normally 1.44M floppy
  8755.  08h    read/write optical disk
  8756.  09h    (DOS 5+) 2.88M floppy
  8757.  
  8758. Format of parameter block for functions 41h, 61h:
  8759. Offset    Size    Description    (Table 0782)
  8760.  00h    BYTE    special functions (reserved, must be zero)
  8761.  01h    WORD    number of disk head
  8762.  03h    WORD    number of disk cylinder
  8763.  05h    WORD    number of first sector to read/write
  8764.  07h    WORD    number of sectors
  8765.  09h    DWORD    transfer address
  8766.  
  8767. Format of parameter block for function 42h:
  8768. Offset    Size    Description    (Table 0783)
  8769.  00h    BYTE    reserved, must be zero (DOS <3.2)
  8770.           bit 0=0: format/verify track
  8771.             1: format status call (DOS 3.2+), don't actually format
  8772.           bits 1-7 reserved, must be zero
  8773.         value on return (DOS 3.3+):
  8774.           00h    specified tracks, sectors/track supported by BIOS
  8775.           01h    function not supported by BIOS
  8776.           02h    specified tracks, sectors/track not allowed for drive
  8777.           03h    no disk in drive
  8778.  01h    WORD    number of disk head
  8779.  03h    WORD    number of disk cylinder
  8780.  
  8781. Format of parameter block for function 62h:
  8782. Offset    Size    Description    (Table 0784)
  8783.  00h    BYTE    reserved, must be zero (DOS <3.2)
  8784.           bit 0=0: verify single track
  8785.             1: verify multiple tracks
  8786.           bits 1-7 reserved, must be zero
  8787.         value on return (DOS 3.3+):
  8788.           00h    specified tracks, sectors/track supported by BIOS
  8789.           01h    function not supported by BIOS
  8790.           02h    specified tracks, sectors/track not allowed for drive
  8791.           03h    no disk in drive
  8792.  01h    WORD    number of disk head
  8793.  03h    WORD    number of disk cylinder
  8794.  05h    WORD    number of tracks to verify (equivalent to 255 or fewer sectors)
  8795.  
  8796. Format of parameter block for functions 46h, 66h:
  8797. Offset    Size    Description    (Table 0785)
  8798.  00h    WORD    (call) info level (should be 0000h)
  8799.  02h    DWORD    disk serial number (binary)
  8800.  06h 11 BYTEs    volume label or "NO NAME    "
  8801.  11h  8 BYTEs    filesystem type "FAT12     " or "FAT16   " (CL=66h only)
  8802.  
  8803. Format of parameter block for functions 47h, 67h:
  8804. Offset    Size    Description    (Table 0786)
  8805.  00h    BYTE    special-function field (must be zero)
  8806.  01h    BYTE    disk-access flag, nonzero if access allowed by driver
  8807.  
  8808. Format of parameter block for function 48h:
  8809. Offset    Size    Description    (Table 0787)
  8810.  00h    BYTE    (call) locking operation
  8811.         00h lock media in drive
  8812.         01h unlock media
  8813.         02h get locking status
  8814.  01h    BYTE    (ret) drive's lock status
  8815.  
  8816. Format of parameter block for function 52h:
  8817.  00h    BYTE    (call) unused???    (Table 0788)
  8818.         (ret) 00h if flash/ATA drive but no card inserted
  8819.             unchanged otherwise
  8820. Notes:    the absense of a flash card should be tested by checking the DOS error
  8821.       code rather than the returned byte
  8822.     the parameter byte is cleared to 00h erroneously by the Award
  8823.       PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted
  8824.       (bug corrected in PCDISK.EXE v1.02h and later)
  8825.     not supported by the SystemSoft ATADRV.EXE and the Phoenix PCMATA.SYS
  8826.       PCMCIA/ATA drivers
  8827.  
  8828. Format of parameter block for function 68h:
  8829. Offset    Size    Description    (Table 0789)
  8830.  00h    BYTE    01h for default media type, 00h for any other media type
  8831.         (see also INT 13/AH=20h"Compaq")
  8832.  01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M
  8833.  
  8834. Format of parameter block for function 73h:
  8835. Offset    Size    Description    (Table 0790)
  8836.  00h    BYTE    ???
  8837.         00h ATA card inserted ???
  8838.         80h ATA card not inserted ???
  8839.  01h    BYTE    length of parameter block ???
  8840.         apparently always 40h
  8841.  02h    BYTE    ???
  8842.         00h ATA card not inserted ???
  8843.         0Dh ATA card inserted ???
  8844.  03h  2 BYTEs    ??? (apparently always 00h)
  8845.  05h    BYTE    drive number (0=first) ???
  8846.  06h    BYTE    total number of drives ???
  8847.  07h    BYTE    ???
  8848.         00h ATA card not inserted ???
  8849.         01h ATA card inserted ???
  8850.  08h 17 BYTEs    ???
  8851.  19h    BYTE    ???
  8852.         00h ATA card not inserted ???
  8853.         01h ATA card inserted ???
  8854.  1Ah    BYTE    ??? (apparently always 01h)
  8855.  1Bh    BYTE    ???
  8856.         00h ATA card not inserted ???
  8857.         01h ATA card inserted ???
  8858.  1Ch  2 BYTEs    ??? (apparently always 0015h)
  8859.  1Eh  2 BYTEs    ???
  8860.  20h  2 BYTEs    ??? (apparently always 0110h)
  8861.  22h 15 BYTEs    ???
  8862.  31h  2 BYTEs    ??? (apparently always 7000h)
  8863.  33h 11 BYTEs    driver signature
  8864.         "AWARD PDISK" for Award PCDISK.EXE PCMCIA/ATA driver
  8865.         "MS-BIOS    " for HP 200LX generic ATA driver
  8866.  3Eh  2 BYTEs    ???
  8867. Notes:    parameter structure possibly depends on driver
  8868.     this function is not supported by the SystemSoft ATADRV.EXE and the
  8869.       Phoenix PCMATA.SYS PCMCIA/ATA drivers
  8870.  
  8871. Format of parameter block for function 7Fh for SystemSoft ATADRV.EXE:
  8872. Offset    Size    Description    (Table 0791)
  8873.  00h    DWORD    -> unknown location within driver
  8874. Note:    function supported by the SystemSoft ATADRV.EXE PCMCIA/ATA driver
  8875.       but not by the Award PCDISK.EXE PCMCIA/ATA driver
  8876. SeeAlso: #0792
  8877.  
  8878. Format of parameter block for function 7Fh for Phoenix PCMATA.SYS:
  8879. Offset    Size    Description    (Table 0792)
  8880.  00h  8 BYTEs    ???
  8881. Note:    this function supported by the Phoenix PCMATA.SYS PCMCIA/ATA driver
  8882.       but not by the Award PCDISK.EXE PCMCIA/ATA driver
  8883. SeeAlso: #0791
  8884. --------D-21440E-----------------------------
  8885. INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
  8886.     AX = 440Eh
  8887.     BL = drive number (00h=default,01h=A:,etc)
  8888. Return: CF set on error
  8889.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  8890.     CF clear if successful
  8891.         AL = 00h block device has only one logical drive assigned
  8892.          1..26 the last letter used to reference the drive (1=A:,etc)
  8893. Notes:    DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  8894.       always returns AL=00h
  8895.     in addition to the normal operation, if Stacker is installed, this
  8896.       call also sets the volume number at offset 58h in the Stacker
  8897.       device driver (DR-DOS 3.41-5.0 only; use AX=4408h otherwise)
  8898.       (see AX=4404h"Stacker",INT 25/AX=CDCDh)
  8899. SeeAlso: AX=4408h,AX=440Fh,INT 2F/AX=122Bh
  8900. --------D-21440F-----------------------------
  8901. INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
  8902.     AX = 440Fh
  8903.     BL = physical drive number (00h=default,01h=A:,etc))
  8904. Return: CF set on error
  8905.         AX = error code (01h,0Fh) (see #0885 at AH=59h)
  8906.     CF clear if successful
  8907.         drive now responds to next logical drive number
  8908. Notes:    maps logical drives to physical drives, similar to DOS's treatment of
  8909.       a single physical floppy drive as both A: and B:
  8910.     DR-DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
  8911.       always returns an error on this function
  8912. SeeAlso: AX=440Eh,INT 2F/AX=122Bh
  8913. --------D-214410-----------------------------
  8914. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
  8915.     AX = 4410h
  8916.     BX = handle for device
  8917.     CH = category code (see #0765)
  8918.     CL = function code (see #0766)
  8919. Return: CF clear if successful
  8920.         AX = 0000h    specified IOCTL function is supported
  8921.     CF set on error
  8922.         AL = 01h    IOCTL capability not available
  8923. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  8924.       standard DOS 3.2 set may use this call first to see whether a
  8925.       particular call is supported
  8926. SeeAlso: AX=440Ch,AX=440Dh,AX=4411h
  8927. --------d-214410BXFFFF-----------------------
  8928. INT 21 U - NewSpace - ENABLE DRIVER
  8929.     AX = 4410h
  8930.     BX = FFFFh
  8931. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  8932.       all files as they are written and decompresses them as they are read
  8933. Note:    compressed files are not accessible unless the driver is enabled
  8934. SeeAlso: AX=4411h/BX=FFFFh
  8935. --------D-214411-----------------------------
  8936. INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
  8937.     AX = 4411h
  8938.     BL = drive number
  8939.     CH = category code (see #0778)
  8940.     CL = function code (see #0779)
  8941. Return: CF clear if successful
  8942.         AX = 0000h    specified IOCTL function is supported
  8943.     CF set on error
  8944.         AL = 01h    IOCTL capability not available
  8945. Note:    a program which wishes to use Generic IOCTL calls beyond those in the
  8946.       standard DOS 3.2 set may use this call first to see whether a
  8947.       particular call is supported
  8948. SeeAlso: AX=440Ch,AX=440Dh,AX=4410h
  8949. --------d-214411BXFFFF-----------------------
  8950. INT 21 U - NewSpace - DISABLE DRIVER
  8951.     AX = 4411h
  8952.     BX = FFFFh
  8953. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  8954.       all files as they are written and decompresses them as they are read
  8955. Note:    compressed files are not accessible unless the driver is enabled
  8956. SeeAlso: AX=4410h/BX=FFFFh
  8957. --------O-214412-----------------------------
  8958. INT 21 O - DR-DOS 5.0-6.0 - DETERMINE DOS TYPE
  8959.     AX = 4412h
  8960.     CF set
  8961. Return: CF set if not DR-DOS
  8962.         AX = error code (see #0885 at AH=59h)
  8963.     CF clear if DR-DOS
  8964.         DX = AX = version code (see #0794)
  8965. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  8966.       identical to AX=4452h
  8967. SeeAlso: AX=4452h
  8968. --------d-214412BXFFFF-----------------------
  8969. INT 21 U - NewSpace - INSTALLATION CHECK???
  8970.     AX = 4412h
  8971.     BX = FFFFh
  8972. Return: AX = PSP segment of NewRes (resident driver for NewSpace)
  8973.     BX:DX -> ???
  8974.     CX = ???
  8975. SeeAlso: AX=4411h/BX=FFFFh
  8976. --------d-214413BXFFFF-----------------------
  8977. INT 21 U - NewSpace - GET ???
  8978.     AX = 4413h
  8979.     BX = FFFFh
  8980. Return: AX = code segment of NewRes (resident driver for NewSpace)
  8981.     BX = offset of ???
  8982. SeeAlso: AX=4412h/BX=FFFFh
  8983. --------O-214414-----------------------------
  8984. INT 21 OU - DR-DOS 5.0-6.0 - SET GLOBAL PASSWORD
  8985.     AX = 4414h
  8986.     DS:DX -> password string (blank-padded to 8 characters)
  8987. Desc:    Specify the master password for accessing files.
  8988. Note:    this obsolete call, which is no longer supported in Novell DOS 7, is
  8989.       identical to AX=4454h
  8990. SeeAlso: AX=4454h
  8991. --------d-214414BXFFFF-----------------------
  8992. INT 21 U - NewSpace - DEBUGGING DUMP
  8993.     AX = 4414h
  8994.     BX = FFFFh
  8995. Return: debugging dump written to X:\NEWSPACE.SMP
  8996. SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
  8997. --------O-2144-------------------------------
  8998. INT 21 OU - DR-DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
  8999.     AH = 44h
  9000.     AL = 16h to 18h
  9001. Note:    these obsolete subfunctions (which are no longer supported in Novell
  9002.       DOS 7) are identical to AX=4456h through 4458h
  9003. SeeAlso: AX=4456h,AX=4457h,AX=4458h
  9004. --------O-214451-----------------------------
  9005. INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
  9006.     AX = 4451h
  9007. Return: CF set if not Concurrent DOS
  9008.         AX = error code (see #0885 at AH=59h)
  9009.     CF clear if successful
  9010.         AH = single-user/multiuser nature
  9011.         10h single-user
  9012.             AL = operating system version ID (see #0794)
  9013.         14h multiuser
  9014.             AL = operating system version ID (see #0793)
  9015. Notes:    as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
  9016.       in the environment variable VER
  9017.     use this function if you are looking for multiuser capabilities,
  9018.       AX=4452h for single-user
  9019.     this function should never return the single-user values
  9020. SeeAlso: AX=4452h,AX=4459h
  9021.  
  9022. (Table 0793)
  9023. Values for Digital Research operating system version ID:
  9024.  32h    Concurrent PC DOS 3.2
  9025.  41h    Concurrent DOS 4.1
  9026.  50h    Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
  9027.  60h    Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
  9028.  62h    Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
  9029.  66h    DR Multiuser DOS 5.1
  9030.  67h    Concurrent DOS 5.1
  9031. --------O-214452-----------------------------
  9032. INT 21 - DR-DOS 3.41+ - DETERMINE DOS TYPE/GET DR-DOS VERSION
  9033.     AX = 4452h ("DR")
  9034.     CF set
  9035. Return: CF set if not DR-DOS
  9036.         AX = error code (see #0885 at AH=59h)
  9037.     CF clear if DR-DOS
  9038.         AX = version code
  9039.         AH = single-user/multiuser nature
  9040.         10h single-user
  9041.             AL = operating system version ID (see #0794)
  9042.         14h multiuser
  9043.             AL = operating system version ID (see #0793)
  9044.         DX modified (see note)
  9045. Notes:    the DR-DOS version is stored in the environment variable VER
  9046.     use this function if looking for single-user capabilities, AX=4451h
  9047.       if looking for multiuser; this call should never return multiuser
  9048.       values
  9049.     in DR-DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
  9050.       (reportedly, DH=00h when booting NWDOS7 from installation disks)
  9051.     Novell DOS 7 returns error code 0001h if SETVER 255.x is in effect for
  9052.       the calling program
  9053. SeeAlso: AX=4412h,AX=4451h,AX=4459h
  9054.  
  9055. (Table 0794)
  9056. Values for Digital Research operating system version ID:
  9057.  60h    DOS Plus
  9058.  63h    DR-DOS 3.41
  9059.  64h    DR-DOS 3.42
  9060.  65h    DR-DOS 5.00
  9061.  67h    DR-DOS 6.00
  9062.  70h    PalmDOS
  9063.  71h    DR-DOS 6.0 March 1993 "business update"
  9064.  72h    Novell DOS 7.0
  9065. --------O-214454-----------------------------
  9066. INT 21 U - DR-DOS 3.41+ - SET GLOBAL PASSWORD
  9067.     AX = 4454h
  9068.     DS:DX -> password string (blank-padded to 8 characters)
  9069. Desc:    Specify the master password for accessing files.
  9070. SeeAlso: AX=4303h,AX=4414h
  9071. --------O-214456-----------------------------
  9072. INT 21 U - DR-DOS 5.0+ - HISTORY BUFFER CONTROL
  9073.     AX = 4456h
  9074.     DL = control flags (see #0795)
  9075. Return: AL = previous value of state flags (see #0796)
  9076. Note:    DR-DOS 6.0 only checks bit 0 and ignores the rest of DL
  9077. SeeAlso: #0797
  9078.  
  9079. Bitfields for control flags:
  9080. Bit(s)    Description    (Table 0795)
  9081.  0    whose buffer: 0=application, 1=COMMAND.COM
  9082. ---Novell DOS 7---
  9083.  1    toggle HISTORY usage
  9084.  2    toggle INSERT state 
  9085. Note:    only one bit at a time may be used
  9086.  
  9087. Bitfields for state flags:
  9088. Bit(s)    Description    (Table 0796)
  9089.  0    HISTORY buffer enabled
  9090.  1    INSERT enabled
  9091.  2-5    unused
  9092.  7    whose buffer: 0=application, 1=COMMAND.COM
  9093. --------O-214457-----------------------------
  9094. INT 21 U - DR-DOS 5.0+ - SHARE/HILOAD CONTROL
  9095.     AX = 4457h
  9096.     DH = subfunction
  9097.         00h enable/disable SHARE
  9098.         DL = 00h disable
  9099.            = 01h enable
  9100.            else Return: AX = ???
  9101.         01h get HILOAD status
  9102.         Return: AX = status
  9103.                 0000h off
  9104.                 0001h on
  9105.         02h set HILOAD status
  9106.         DL = new state (00h off, 01h on)
  9107.         Return: AX = ???
  9108.         other
  9109.         Return: AX = ???
  9110. Note:    This was seen called by COMMAND.COM of DR-DOS 6.0; it does not seem
  9111.       to be supported by Novell DOS 7
  9112. SeeAlso: AX=4457h/DX=FFFFh
  9113. --------O-214457DXFFFF-----------------------
  9114. INT 21 U - DR-DOS 6.0 - GET SHARE STATUS
  9115.     AX = 4457h
  9116.     DX = FFFFh
  9117. Return: AX = SHARE status
  9118. SeeAlso: INT 2F/AX=1000h
  9119. --------O-214458-----------------------------
  9120. INT 21 U - DR-DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
  9121.     AX = 4458h
  9122. Return: ES:BX -> internal variable table (see #0797,#0798)
  9123.     AX = ??? (0B50h for DR-DOS 5.0, 0A56h for DR-DOS 6.0, 0FE4h for
  9124.           Novell DOS 7)
  9125. SeeAlso: AX=4452h
  9126.  
  9127. Format of DR-DOS 5.0-6.0 internal variable table:
  9128. Offset    Size    Description    (Table 0797)
  9129.  00h    WORD    ???
  9130.  02h    WORD    segment of ???
  9131.  04h    WORD    offset within DOS data segment of history control structure
  9132.           for COMMAND.COM history buffer (see #0799)
  9133.  06h    WORD    offset within DOS data segment of history control structure
  9134.           for application history buffer (see #0799)
  9135.  08h    BYTE    initial history state flags (see #0796)
  9136.  09h  2 BYTEs    ???
  9137.  0Bh    WORD    KB of extended memory at startup
  9138.  0Dh    BYTE    number of far jump entry points
  9139.  0Eh    WORD    segment containing far jumps to DR-DOS entry points (see #0800)
  9140.  10h    WORD    (only if kernel loaded in HMA) offset in HMA of first free HMA
  9141.           memory block (see #0801) or 0000h if none; segment is FFFFh
  9142.  12h    WORD    pointer to segment of environment variables set in CONFIG,
  9143.           or 0000h if already used
  9144. ---DR-DOS 6.0---
  9145.  14h    WORD    (only if kernel loaded in HMA) offset in HMA of first used HMA
  9146.         memory block (see #0801) or 0000h if none; segment is FFFFh
  9147.  16h  8 BYTEs    ???
  9148.  1Eh    WORD    offset in DOS data segment of full COUNTRY.SYS filename
  9149.  20h  8 BYTEs    ???
  9150.  28h    WORD    offset in DOS data segment of SHARE hook table
  9151.  2Ah  2 BYTEs    ???
  9152.  2Ch    WORD    offset in DOS data segment of far pointer to INT 2F/AX=1000h
  9153.           handler
  9154. Note:    the segment used for the DR-DOS 6.0 CONFIG environment variables
  9155.       (excluding COMSPEC, VER and OS) is only useful for programs/drivers
  9156.       called from CONFIG.SYS. The word is set to zero later when the area
  9157.       is copied to the COMMAND.COM environment space.  This allows
  9158.       CONFIG.SYS to pass information to AUTOEXEC.BAT.
  9159.  
  9160. Format of Novell DOS 7 internal variable table:
  9161. Offset    Size    Description    (Table 0798)
  9162.  00h    ???
  9163.  1Eh    WORD    offset of COUNTRY.SYS filename
  9164.  42h 16 DWORDs    pointers to ??? entry points
  9165.     ???
  9166.  
  9167. Format of history control structure:
  9168. Offset    Size    Description    (Table 0799)
  9169.  00h    WORD    segment of buffer
  9170.  02h    WORD    size of buffer in bytes
  9171.  04h    WORD    ???
  9172.  
  9173. Format of kernel entry jump table for DR-DOS 5.0-6.0:
  9174. Offset    Size    Description    (Table 0800)
  9175.  00h  5 BYTEs    far jump to kernel entry point for CP/M CALL 5
  9176.  05h  5 BYTEs    far jump to kernel entry point for INT 20
  9177.  0Ah  5 BYTEs    far jump to kernel entry point for INT 21
  9178.  0Fh  5 BYTEs    far jump to kernel entry point for INT 22 (RETF)
  9179.  14h  5 BYTEs    far jump to kernel entry point for INT 23 (RETF)
  9180.  19h  5 BYTEs    far jump to kernel entry point for INT 24
  9181.  1Eh  5 BYTEs    far jump to kernel entry point for INT 25
  9182.  23h  5 BYTEs    far jump to kernel entry point for INT 26
  9183.  28h  5 BYTEs    far jump to kernel entry point for INT 27
  9184.  2Dh  5 BYTEs    far jump to kernel entry point for INT 28
  9185.  32h  5 BYTEs    far jump to kernel entry point for INT 2A (IRET)
  9186.  37h  5 BYTEs    far jump to kernel entry point for INT 2B (IRET)
  9187.  3Ch  5 BYTEs    far jump to kernel entry point for INT 2C (IRET)
  9188.  41h  5 BYTEs    far jump to kernel entry point for INT 2D (IRET)
  9189.  46h  5 BYTEs    far jump to kernel entry point for INT 2E (IRET)
  9190.  4Bh  5 BYTEs    far jump to kernel entry point for INT 2F
  9191. Notes:    all of these entry points are indirected through this jump table
  9192.       to allow the kernel to be relocated into high memory while leaving
  9193.       the actual entry addresses in low memory for maximum compatibility
  9194.     some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
  9195.       as COMMAND.COM is loaded, and return immediately to the caller, some
  9196.       returning an error code (the original handler for INT 2F returns
  9197.       AL=03h [fail]).
  9198.  
  9199. Format of HMA Memory Block (DR-DOS 6.0 kernel loaded in HMA):
  9200. Offset    Size    Description    (Table 0801)
  9201.  00h    WORD    offset of next HMA Memory Block (0000h if last block)
  9202.  02h    WORD    size of this block in bytes (at least 10h)
  9203.  04h    BYTE    type of HMA Memory Block (interpreted by MEM)
  9204.         00h system
  9205.         01h KEYB
  9206.         02h NLSFUNC
  9207.         03h SHARE
  9208.         04h TaskMAX
  9209.         05h COMMAND
  9210.  05h    var    TSR (or system) code and data. DR-DOS TSR's, such as KEYB,
  9211.           hooks interrupts using segment FFFEh instead FFFFh.
  9212. --------O-214459-----------------------------
  9213. INT 21 - DR MultiUser DOS 5.0 - API
  9214.     AX = 4459h
  9215.     CL = function (see #2602 at INT E0"CP/M")
  9216.     DS,DX = parameters
  9217. Notes:    DR-DOS 5.0 and Novell DOS 7 return CF set and AX=0001h
  9218.     this API is also available on INT E0
  9219. SeeAlso: AX=4452h,INT E0"CP/M"
  9220. --------N-2144E0-----------------------------
  9221. INT 21 U - Sun PC-NFS - API???
  9222.     AX = 44E0h
  9223.     DS:DX -> ???
  9224.     SS:BP -> stack frame (see #0802)
  9225. Return: ???
  9226. Note:    this function is also supported by Beame&Whiteside's BWPCNFS shim; the
  9227.       description presented here was derived from that shim
  9228.  
  9229. Format of PC-NFS stack frame:
  9230. Offset    Size    Description    (Table 0802)
  9231.  00h    WORD    -> previous stack frame
  9232.  02h    DWORD    return address
  9233. --------d-2144FFBXFFFF-----------------------
  9234. INT 21 U - NewSpace - ???
  9235.     AX = 44FFh
  9236.     BX = FFFFh
  9237.     DX = ???
  9238. Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
  9239.       all files as they are written and decompresses them as they are read
  9240. SeeAlso: AX=4414h/BX=FFFFh
  9241. --------!---Section--------------------------
  9242.